gpt4 book ai didi

c# - 如何编写为模板化基指定类型参数的派生类

转载 作者:行者123 更新时间:2023-11-28 05:09:15 25 4
gpt4 key购买 nike

我正在学习 C++,但我无法从 C# 中引入这种设计模式。如果此模式在 C++ 中不起作用,或者我的语法不正确,我无法确定。

在示例中,我想创建一个解码位集的类。

在带有泛型的 C# 中,它看起来像这样:

abstract class Base<T>
{
public abstract T GetValue(BitArray bits);
}

class Derived : Base<MyType>
{
public override MyType GetValue(BitArray bits)
{
// Do some magic to decode this bitset
}
}

这是我在 C++ 中的幼稚尝试

template<T,Q> 
class Base
{
public:
Base() = default;
virtual ~Base() = 0;
virtual T* GetValue(const std::bitset<Q>& bits) const = 0;
}

class Derived : Base<MyType, 32>
{
public:
Derived();
~Derived();
MyType* GetValue(const std::bitset<32>& bits) const;
}

MyType* Derived::GetValue(const std::bitset<32>)
{
// Do some magic to decode this bitset
}

当我尝试编译该 C++ 代码时,编译器会抛出各种错误(我认为它在很多方面都是错误的)。

我如何实现这种让继承类在 C++ 中为基模板指定类型参数的模式?

最佳答案

The compiler throws all manner of errors when I try to compile that C++ code (which I imagine is wrong in a number of ways).

  • 类声明后缺少分号
  • 模板声明中的语法错误
  • 缺少 std::bitset 的包含
  • MyType 未定义
  • 您不应该使用 Base 的公共(public)或 protected 继承

此外,您根本不清楚为什么要使用虚拟方法。您也许还应该从 Derived::GetValue 返回值,或者返回一个指向 MyType 的智能指针:

unique_ptr<MyType> Derived::GetValue(const std::bitset<32> &) {...}

Sample code :

#include <bitset>
#include <memory>

class MyType;

template<typename T, unsigned Q>
class Base
{
public:
virtual std::unique_ptr<T> GetValue(const std::bitset<Q>& bits) const = 0;
};

class Derived : public Base<MyType, 32>
{
public:
std::unique_ptr<MyType> GetValue(const std::bitset<32>& bits) const;
};

关于c# - 如何编写为模板化基指定类型参数的派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43853190/

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