C++ 我可以为运算符显式指定模板参数吗?
我的课是Foo:C++ 我可以为运算符显式指定模板参数吗?,c++,C++,我的课是Foo: class Foo { template <typename T> T* operator () (void) { return (T*) something; } } class-Foo{ 模板 T*运算符()(void){ 返回(T*)某物; } } 不能推断,但我想说的是 Foo foo; type_t bar = foo <type_t> (); Foo-Foo; type_t bar=foo
class Foo {
template <typename T>
T* operator () (void) {
return (T*) something;
}
}
class-Foo{
模板
T*运算符()(void){
返回(T*)某物;
}
}
不能推断,但我想说的是
Foo foo;
type_t bar = foo <type_t> ();
Foo-Foo;
type_t bar=foo();
但这是一个语法错误
有办法做到这一点吗?
(或者是在不提供类型实例的情况下传入类型的更好方法?您可以使用运算符名称语法:
type_t *bar = foo.operator() <type_t> ();
type_t*bar=foo.operator();
那当然很难看。有两种解决方案:
operator()
的典型用法下面是一个编译并运行的示例:
struct Foo {
template <typename T>
T* operator () () {
return (T*) 0;
}
};
int main()
{
double* bar = Foo().operator()<double>();
}
structfoo{
模板
T*运算符()(){
返回(T*)0;
}
};
int main()
{
双*bar=Foo().operator();
}
但那真的很难看。这是一个明显的经营者超载滥用的案例。考虑使用普通函数名。运算符重载应该会使代码读起来更快,而不是相反。您返回的是
T*
,因此您的返回必须是类型\u T*
。谢谢,我在谷歌上沮丧地搜索了一会儿,想知道该怎么称呼它。标题更新。