gpt4 book ai didi

c++ - 我可以根据属性重载函数模板吗?

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

我想从不同的类家族中获得一个共同的属性。对于一些人,我可以只使用一个成员,对于一些人我需要调用一个函数。我能否以某种方式重载模板函数,以便编译器根据类是否具有 functionAfunctionBmember 来选择合适的模板函数?目前我收到错误,因为我多次定义相同的模板函数...

template<class TypeWithFunctionA>
int doSomething(const TypeWithFunctionA & h)
{
return h.functionA();
}

template<class TypeWithFunctionB>
int doSomething(const TypeWithFunctionB & h)
{
return h.functionB();
}

template<class TypeWithMember>
int doSomething(const TypeWithMember & h)
{
return h.member;
}

最佳答案

您可以使用 SFINAE 重载它们.例如

template<class TypeWithFunctionA>
auto doSomething(const TypeWithFunctionA & h) -> decltype(h.functionA())
{
return h.functionA();
}

template<class TypeWithFunctionB>
auto doSomething(const TypeWithFunctionB & h) -> decltype(h.functionB())
{
return h.functionB();
}

template<class TypeWithMember>
auto doSomething(const TypeWithMember & h) -> decltype(h.member)
{
return h.member;
}

关于c++ - 我可以根据属性重载函数模板吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65949894/

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