有人能幫我重構下面的代碼,以便它編譯(使用pre-C++ 11編譯器)。具有頭文件和源文件的部分和完整模板專業化
MyClass.h:
namespace myns {
enum LiteralTypes {
kINT_LITERAL = 0,
kSTRING_LITERAL
};
class MyClass {
template <LiteralTypes literal_type, typename T> struct AddLiterals;
template <typename T>
struct AddLiterals<kINT_LITERAL, T> {
static void apply(const vector<T>& vals);
};
template <>
struct AddLiterals<kSTRING_LITERAL, char*> {
static void apply(const vector<char*>& vals);
};
template <>
struct AddLiterals<kSTRING_LITERAL, std::string> {
static void apply(const vector<std::string>& vals);
};
};
}
MyClass.cpp
namespace myns {
template <typename T>
void MyClass::AddLiterals<kINT_LITERAL, T>::apply(const vector<T>& vals) {
BOOST_STATIC_ASSERT((boost::is_same<T, int16_t>::value ||
boost::is_same<T, int32_t>::value ||
boost::is_same<T, int64_t>::value));
// Implementation
}
template <>
void MyClass::AddLiterals<kINT_LITERAL, char*>::apply(const vector<char*>& vals) {
// Implementation
}
template <>
void MyClass::AddLiterals<kINT_LITERAL, std::string>::apply(const vector<std::string>& vals) {
// Implementation
}
}
我相信編譯錯誤是因爲全特具有在命名空間範圍進行界定,而不是類定義中。除此之外,我迷了路。
編輯: 錯誤消息(大致)如下:
MyClass.h: error: explicit specialization in non-namespace scope ‘class myns::MyClass’
MyClass.cpp: error: template-id ‘apply<>’ for ‘void myns::MyClass::AddLiterals<kSTRING_LITERAL, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::apply(const vector<std::string>& vals)’ does not match any template declaration
MyClass.cpp: error: invalid function declaration
完成。對不起,沒有提供這首先。我手動將錯誤消息中的一些名稱替換爲上面示例中使用的名稱(並刪除了重複的錯誤消息)。 – user1622959