我有一个模板类,它包含一个不依赖于模板参数的静态函数.然而,当我使用该函数时,编译器似乎强迫我指定一个typename.
template <typename T>
class MyClass {
...
static void function();
};
template <typename T>
void MyClass<T>::function() {
....
}
Run Code Online (Sandbox Code Playgroud)
此功能可用作:
MyClass<int>::function();
Run Code Online (Sandbox Code Playgroud)
但'int'就是满足编译器的需要.它没有任何意义,可以被任何其他类型替换,这不会增加代码的可读性.我想做点什么
MyClass<>::function();
Run Code Online (Sandbox Code Playgroud)
甚至
MyClass::function();
Run Code Online (Sandbox Code Playgroud)
但编译器不允许我.我意识到这是因为在头文件中我明确地将该函数标记为模板化,但是当我从头文件中删除'<T>'时它也不会编译.
这样做的正确方法是什么?
我的模板类A包含一个调用模板类的静态函数的函数:
template <typename T>
void A<T>::fun() {
T obj = T::create();
....
}
Run Code Online (Sandbox Code Playgroud)
如果我想在T = B*时使用此代码,我应该如何修改?我知道我不能做(*T):: create(),但从概念上讲,这就是我想要的.