gpt4 book ai didi

c++ - C++中如何指定一个模板类实现了某些方法?

转载 作者:搜寻专家 更新时间:2023-10-31 02:19:29 24 4
gpt4 key购买 nike

在 Java 泛型中,我们可以简单地使用 MyClass<T implements SomeInterface> .但是,我想不出与此等效的 C++。

然后,当我有一个模板类时 T , 如何指定此 T 的特定方法支持吗?

最佳答案

概念就是您要找的东西。但是,它们还不在当前的 C++ 标准中。所以你可以做的是使用 SFINAE

确定某种类型是否尊重某种接口(interface)的类型特征可以由许多正在寻找特定成员的类型特征组成。

这是确定类是否具有特定成员的类型特征,如下所示:

template<typename T>
struct has_member1 {
private:
template<typename C> static std::true_type test(decltype(C::THE_MEMBER_NAME)*);
template<typename C> static std::false_type test(...);

public:
constexpr static bool value = decltype(test<T>(nullptr))::value;
};

所以现在您已经可以检查特定成员了。要检查接口(interface),您可以执行以下操作:

template<typename T>
struct is_my_interface {
constexpr static bool value =
has_member1<T>::value &&
has_member2<T>::value &&
has_member3<T>::value;
};

现在你的模板类:

// declare it
template<typename, typename = void> struct MyClass;


template<typename T>
struct MyClass<T, enable_if_t<is_my_interface<T>>> {
// class body
};

关于c++ - C++中如何指定一个模板类实现了某些方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33375548/

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