gpt4 book ai didi

c# - 在 C++ 中实现接口(interface)

转载 作者:可可西里 更新时间:2023-11-01 16:38:25 25 4
gpt4 key购买 nike

我通常用 C# 编程,但我正在尝试做一些 C++,并且在尝试用 C++ 实现接口(interface)时遇到了一些困难。

在 C# 中,我会做这样的事情:

class Base<T>
{
public void DoSomething(T value)
{
// Do something here
}
}

interface IDoubleDoSomething
{
void DoSomething(double value);
}

class Foo : Base<double>, IDoubleDoSomething
{
}

在 C++ 中我是这样实现的:

template <class T>
class Base
{
public:
virtual void DoSomething(T value)
{
// Do something here
}
};

class IDoubleDoSomething
{
public:
virtual void DoSomething(double value) = 0;
};

class Foo : public Base<double>, public IDoubleDoSomething
{
};

问题是我无法实例化 Foo 因为它是抽象的(没有实现 DoSomething)。我意识到我可以实现 DoSomething 并只调用 Base 上的方法,但我希望有更好的方法来做到这一点。我有其他类继承自具有不同数据类型的基类,还有其他类继承自不使用 Base 的 IDoubleDoSomething。

感谢任何帮助。

最佳答案

考虑以下 C++ 代码

class Foo
{
public:
void DoSomething1(){}
};

template<typename t>
void MethodExpectsDosomething1( t f )
{
f.DoSomething1();
}

template<typename t>
void MethodExpectsDosomething2( t f )
{
f.DoSomething2();
}

int main()
{
Foo f;
MethodExpectsDosomething1<Foo>( f );

MethodExpectsDosomething2<Foo>( f );

return 0;
}

在 C++ 中,您可以使用 Foo 而无需实现 IDoSomething1IDoSomething2。第二种方法 MethodExpectsDosomething2 将无法编译,因为 Foo 没有 DoSomething2 方法。

在 C# 中,这样的构造是不可能的,并且强制您具有 IDoSomething1IDoSomething2 接口(interface)并将其指定为 type constraint .

那么也许您需要查看您的代码,看看是否需要这样的接口(interface)?

关于c# - 在 C++ 中实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8715630/

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