【发布时间】:2016-05-11 01:00:12
【问题描述】:
我意识到operator-> 返回的任何东西都会在这样的函数调用中调用它自己的operator->:
someVarWithOverloadedOperator->someFunc();
调用-> 函数的过程将一直持续到其中一个是指针,然后从该指针调用someFunc。
我的问题是:有没有办法强制模板参数使其-> 运算符最终返回某个类:
template<typename ThisClassOperatorMustReturn_TypeA_>
class MyClass{
void foo() {
ThisClassOperatorMustReturn_TypeA_ var;
var->someClassAFunc(); //I need this `->` operator to return type "A"
}
};
有什么办法吗?
【问题讨论】:
-
是否必须“按原样”使用某个类,或者您可以为该类添加特定方法或成员,以实现此模板限制?
-
您希望它在链调用、第一次调用或链的末尾返回
A(所以A*)? -
您是否尝试过在
A*和declltype(var.operator->())之间使用std::is_same的静态断言(如果相关,则在丢弃const之后)? -
@Jarod42 我希望链的末端是
A* -
@TonyD 这不起作用,因为
declltype(var.operator->())可能是介于两者之间的类型(例如A*可能是var.operator->().operator->();
标签: c++ templates operator-keyword