我有有將基本類型的_variant_t靜態函數的類類型:C++模板函數跳過一個靜態函數調用
class VariantConverter {
public:
static void ToVariant(int Value, _variant_t &Variant) {
Variant.vt = VT_I4;
Variant.intVal = Value;
}
static void ToVariant(double Value, _variant_t &Variant) {
Variant.vt = VT_R8;
Variant.dblVal = Value;
}
static void ToVariant(std::string Value, _variant_t &Variant) {
Variant.SetString(Value.c_str());
}
static void ToVariant(bool Value, _variant_t &Variant) {
Variant.vt = VT_BOOL;
Variant.boolVal = Value;
}
};
我想如下在我的模板函數的一個使用此:
void doSomething(_variant_t);
template <typename T>
void ProcessVariant(T Value) {
_variant_t Variant;
VariantConverter::ToVariant(Value, Variant); // SKIPPED!!!!
doSomething(Variant); // Do something with the _variant_t
}
int main() {
ProcessVariant<int>(1);
ProcessVariant<double>(1.1);
}
上面的代碼是行不通的,所以我調試,找出什麼是錯的..
事實證明,ToVariant被調用的整個行被忽略了! (當我爲每一行設置中斷點並繼續點擊「繼續」時,它只是忽略ToVariant線並直接轉到doSomething)
爲什麼ToVariant方法根本不會被調用?
@ T.C。對不起,這是一個錯字。我更新了它。 – user2436815
你怎麼知道它沒有被調用?什麼指示(除了可能是片狀的調試器)告訴你該功能被跳過? – PaulMcKenzie
@PaulMcKenzie在Visual Studio中,我在ProcessVariant函數的每一行都設置了斷點...它進入第一行,然後直接執行doSomething ..完全忽略第二行 – user2436815