我試圖獲得一些最初使用GCC編譯與MSVC編譯的代碼,並且在代碼中遇到了回調包裝類的問題。我已經提取下面的代碼的關鍵部分:MSVC抱怨函數指針不是編譯時常量
template <typename T_func>
struct internal_parameter_resolver;
template <typename R>
struct internal_parameter_resolver<R()> {
typedef R(*type)();
};
template <typename R, typename P1>
struct internal_parameter_resolver<R(P1)> {
typedef R(*type)(P1);
};
template <typename T_func, typename internal_parameter_resolver<T_func>::type func>
void bind() {
// Create and return instance of class Callback...
}
double func1() { return 0.5; }
int func2(double i) { return 0; }
int main() {
bind<double(), &func1>(); // (Line 23)
bind<int(double), &func2>(); // (Line 24)
return 0;
}
雖然這編譯GCC下細,MSVC 2010提供了以下錯誤信息:
1>c:\users\public\documents\projects\_test\_test\main.cpp(23): error C2975: 'func' : invalid template argument for 'bind', expected compile-time constant expression
1> c:\users\public\documents\projects\_test\_test\main.cpp(14) : see declaration of 'func'
1>c:\users\public\documents\projects\_test\_test\main.cpp(24): error C2975: 'func' : invalid template argument for 'bind', expected compile-time constant expression
1> c:\users\public\documents\projects\_test\_test\main.cpp(14) : see declaration of 'func'
有誰知道爲什麼MSVC認爲一個想法那些函數指針不是編譯時常量?或者是代碼中其他地方的問題(即不是第23行和第24行)?如果這是編譯器中的錯誤,我會歡迎任何有關可能的解決方法的建議。
謝謝!
使用gcc 4.6 &&鏗鏘3.1編譯正常。 – mfontanini 2012-08-11 21:24:07
@mfontanini是的,我知道,這是MSVC給我的問題。 – zennehoy 2012-08-11 21:25:10