可以显式指定操作符的模板参数吗?
Can I explicitly specify template arguments for an operator?
我有一个类Foo:
class Foo {
template <typename T>
T* operator () (void) {
return (T*) something;
}
}
T不能被推导出来,但是我想要的是能够说一些类似
的东西Foo foo;
type_t bar = foo <type_t> ();
但是这是一个语法错误。
有办法做到这一点吗?(或者可能有更好的方式传递类型而不提供类型的实例?)
您可以使用操作符名称语法:
type_t *bar = foo.operator() <type_t> ();
那当然很丑。有两种解决方案:
更改操作符,使其接受形参,从而类型可演绎。
将其从操作符更改为命名函数。这似乎不是
operator()
的典型用途。
下面是一个编译和运行的示例:
struct Foo {
template <typename T>
T* operator () () {
return (T*) 0;
}
};
int main()
{
double* bar = Foo().operator()<double>();
}
但是真的很丑。这是一个明显的操作符重载滥用案例。考虑使用普通的函数名。操作符重载应该使代码读起来更快,而不是相反。
相关文章:
- 我可以将C 17 Capture lambda ConstexPR转换操作符的结果用作函数指针模板非类型参数吗?
- 单参数构造函数和赋值操作符
- c++中的操作符重载,无法调用双参数构造函数
- 操作符重载模板参数
- c++操作符重载以指针类型作为参数
- 在覆盖new操作符时传递更多参数(c++)
- 带有不同参数的c++操作符重载模板
- 重载操作符=,不同的类作为参数
- 如何检查类型是否存在无参数操作符()
- 传递静态方法作为参数,不需要地址操作符
- 检索对象的函数操作符的参数类型
- 带有派生类型参数的赋值操作符
- 使用具有不同参数的相同操作符
- 为什么小于操作符接受不同类型的参数,而std::min不接受
- 将构造函数参数转发给放置new操作符
- (为什么)移动构造函数或移动赋值操作符应该清除其参数
- 对操作符()()中具有状态和两个参数的函数对象使用boost绑定
- 比较测试失败:unorder_map上的[]操作符产生的参数数量错误
- 操作符重载和不同的模板参数
- c++如何确定重载操作符的参数