C++ 我可以为运算符显式指定模板参数吗?

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

我的课是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*
    。谢谢,我在谷歌上沮丧地搜索了一会儿,想知道该怎么称呼它。标题更新。