gpt4 book ai didi

c++ - 如果不存在,则调用自由函数而不是方法

转载 作者:IT老高 更新时间:2023-10-28 22:12:21 25 4
gpt4 key购买 nike

假设您有一系列类型无关的类通过返回值的给定方法实现一个通用概念:

class A { public: int val() const { ... } };
class B { public: int val() const { ... } };

假设您需要一个通用的自由函数,该函数采用 T 为未实现 val 方法或调用 val 的任何类型返回常规值适用于所有类型的方法:

template<class T> int val_of(const T& t) { return 0; }
template<class T> int val_of(const T& t) { return t.val(); }

考虑到 A 和 B 只是示例:您不知道实现 val 将存在多少类型,以及不实现它会存在多少类型(因此显式特化不会扩展)。

有没有一种基于 C++ 标准的简单方法来静态选择 val_of 版本?

我在想 std::conditionalstd::enable_if,但我没有找到表达条件的简单方法。

最佳答案

您可以使用返回类型的 SFINAE:

template<typename T>
auto val_of(const T& t) -> decltype(std::declval<T>().val())
{
return t.val();
}

int val_of(...)
{
return 0;
}

关于c++ - 如果不存在,则调用自由函数而不是方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21441803/

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