我想做的有效C++ 11當量以下的(顯然)無效代碼:如何將C++模板方法的返回類型聲明爲其他類中靜態方法的返回類型?
class StaticMethodClass {
public:
static int staticMethod(int a) {return 0;}
};
#include <type_traits>
template<class T> class ClassTemplate {
public:
decltype(T::staticMethod(int)) methodTemplate(int a);
};
template<class T>
decltype(T::staticMethod(int)) ClassTemplate<T>::methodTemplate(int a) {
return T::staticMethod(a);
}
template class ClassTemplate<StaticMethodClass>;
我從我的編譯器以下錯誤:
/tmp$ g++ -std=c++11 -c a.cpp
a.cpp:14:26: error: expected primary-expression before ‘int’
decltype(T::staticMethod(int)) ClassTemplate<T>::methodTemplate(int a) {
^
a.cpp:14:32: error: prototype for ‘decltype (T:: staticMethod(<expression error>)) ClassTemplate<T>::methodTemplate(int)’ does not match any in class ‘ClassTemplate<T>’
decltype(T::staticMethod(int)) ClassTemplate<T>::methodTemplate(int a) {
^
a.cpp:10:36: error: candidate is: int ClassTemplate<T>::methodTemplate(int)
decltype(T::staticMethod(int)) methodTemplate(int a);
^
/tmp$ g++ -dumpversion
4.8.3
是什麼,我想有可能嗎?如果是這樣,怎麼樣?
,對於初始代碼,其中'methodTemplate()'在類的聲明中實現合作。然而,將該實現移到課程外面會導致同樣的問題。請參閱修訂後的代碼。 –