我有类似的东西
template <typename T>
T func1() { /* ... */ }
template <typename T>
T func2() { /* ... */ }
// many other functions which use the same template line
如果我尝试这个
template <typename T>
T func1() { /* ... */ }
T func2() { /* ... */ }
我得到编译错误。
是否可以只编写template
一次零件并使代码正常工作?
不,在C ++中,您不能这样做(但是可以在D编程语言中),但是不能
namespace detail {
template<class T> func1() { /* */ }
template<class T> func2() { /* */ }
}
您可以使用
template<class T>
struct detail
{
static T func1() { /* */ }
static T func2() { /* */ }
};
如果要同时部分地对所有函数进行特殊化,则这将变得很有优势(您不能部分地对函数模板进行特殊化,但可以对类模板进行特殊化)。
注意:有一个缺点:命名空间是为新函数打开的,而类不是开放的,除非您控制它们的源,所以最好确保将哪些分组在一起。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句