我显然误解了关于模板专业化的重要事项,因为:
template<typename type> const type getInfo(int i) { return 0; }
template<> const char* getInfo<char*>(int i) { return nullptr; }
无法编译:
src/main.cpp:19:24: error: no function template matches function
template specialization 'getInfo'
,而
template<typename type> type getInfo(int i) { return 0; }
template<> char* getInfo<char*>(int i) { return nullptr; }
工作正常。如何将const
与模板特化一起使用?我的菜鸟错误是什么?
我在clang ++上使用c ++ 11。
答案 0 :(得分:5)
请注意,在第一个示例中,返回类型为const type
,因此const
适用于整个类型。如果type
为char*
(与您的专业化相同),则返回类型为char * const
。编译得很好:
template<typename type> const type getInfo(int i) { return 0; }
template<> char* const getInfo<char*>(int i) { return nullptr; }
这是有道理的 - 如果将类型专门化为指针。为什么模板对指针指向的内容有任何发言权?
但是,在这种情况下,我认为返回类型为const
的原因并不多。
答案 1 :(得分:1)
如果你需要能够返回字符串常量,请使用:
template<typename type> type getInfo(int i) { return 0; }
template<> const char* getInfo<const char*>(int i) { return nullptr; }
你试图做的是:
const int getInfo( int i ) { return 0; }
它没有多大意义。