"运算符最终是否返回类型?-6ren"> "运算符最终是否返回类型?-我意识到 operator-> 返回的 whatever 将在这样的函数调用中调用它自己的 operator->: someVarWithOverloadedOperator->someFunc();-6ren">
gpt4 book ai didi

c++ - 如何判断 "->"运算符最终是否返回类型?

转载 作者:行者123 更新时间:2023-11-30 03:41:49 26 4
gpt4 key购买 nike

我意识到 operator-> 返回的 whatever 将在这样的函数调用中调用它自己的 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"
}
};

有什么办法吗?

最佳答案

您可以为此创建一个特征:

template <typename T>
using arrow_type = decltype(std::declval<T>().operator ->());

template <typename T, typename ArrowType = arrow_type<T>>
struct arrow_last_type
{
using type = typename arrow_last_type<ArrowType>::type;
};

template <typename T, typename P>
struct arrow_last_type<T, P*>
{
using type = P*;
};

然后

static_assert(std::is_same<A*, arrow_last_type<ClassToTest>::type>::value, "unexpected");

Demo

关于c++ - 如何判断 "->"运算符最终是否返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37151364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com