我需要在 C++ 中创建一个模板类。我需要确保模板参数的类型将是一个具有 1 个 int 字段和 1 个 string 字段的类(可以有更多字段,但这些是强制性的)。

例如,在 C# 中,我可以定义一个带有方法或属性的接口(interface),如下所示:

interface MyInterface {
    int GetSomeInteger();
    string GetSomeString();
}

然后我可以在我的模板类中使用它:
class MyClass<T> where T: MyInterface {}

有没有办法在 C++ 中做这样的事情?

最佳答案

C++20 为您提供最接近 C# 的解决方案:

#include <concepts>

template <class T>
concept MyInterface = requires(T x)
{
    { x.GetSomeInteger() } -> std::same_as<int>;
};

然后:
template <MyInterface T>
struct MyClass
{
    // ...
};

关于c++ - 在 C++ 中是否有来自 C# 的关键字 "where"的类似物?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61620949/

10-11 23:02