具有不同方法返回类型的 C++ 模板类设计

标签 c++ templates

C++设计问题

简化示例

template <typename T>
class Thing
{
    T value;
public:
    T get() { return value; }
};

template <typename T>
class Box
{
    Thing<T> thing;
public: 
    T get() { return thing.get(); }
};

现在我需要存储不同类型的 Box,例如

Box<string>, 
Box<matrix>, 
etc 

(其中所有 T 类都不相关)在容器中。显然这是不可能的,因为每种类型的 Box 的 T 都不相同。我无法创建抽象父类(super class),因为 T 的返回类型有所不同,并且如果我以某种方式提供替代实现,则 get() 参数中没有任何内容可以区分要使用哪个。

如何解决这个问题才是合理的方法。当然,我可以在抽象类中添加多个 get(),但这看起来不太像 C++。在某些时候我将不得不检查 isThisAString、isThisAMatrix,问题是最合理的设计是什么,假设我将来可能需要添加专门的 Box 子类,但仍然维护一组类似于 get() 的方法,这些方法基于模板参数。

最佳答案

您正在寻找的称为“类型删除”。有几种实现方式:

关于具有不同方法返回类型的 C++ 模板类设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22992604/

相关文章:

c++ - 通过剥离变量宏/模板/函数对来测试成员函数?

c++ - 两个类仅在模板参数上有所不同

c++ - 指向带有默认参数的函数的指针

c++ - 将字段的偏移量作为模板参数传递给该字段

c++ - 记忆一下从 C++ 到 C 的结构

c++ - 我的调试器运行的代码似乎与我正在构建的代码不同

node.js - Sendgrid 中的替代代币列表

c++ - 函数模板优先级

c++ - 无论如何使用用户输入的类项目名称来访问该项目中的数据?

c++ - 如何在选项卡控件页面内显示对话框?