C++ 模板 - 具有模板化类型的通用方法

标签 c++ templates generics

我开始使用 C++ 模板只是因为我想了解与其他语言 (Java) 的具体差异并且我达到了它们开始出现分歧的地步但我不知道我应该如何解决具体问题问题(或绕过它)。

假设我有一个通用值类,例如

template <class T>
class Value
{
  protected:
    T value;

  public:
    Value(Type type, T value) : type(type), value(value) {}

    void set(T value) { this->value = value; }
    T get() const { return this->value; }
    T clone() { return new Value<T>(type, value); }

    virtual string svalue() const = 0;

    const Type type;
};

和一个特定的子类型:

class Int : public Value<int>
{
  public:  
    Int(int value) : Value<int>(INT, value) { };

    virtual string svalue() const { ... }

  friend ostream& operator<<(ostream& os, const Int& v);
};

(我知道也可以通过使用 template <> 来指定特定类型的代码,但由于我仍然需要足够多地使用它来理解它,所以我现在只是通过自己的 Int 类定义,这只不过是 typedef Value<int>结束)

比方说,是否有可能拥有一个能够存储指向 Value 实例的任意指针的集合?无需指定泛型类的具体具体类型。

据我所知,模板只是一个编译时问题,编译器会分析使用模板的所有具体类型,并为每个类型编译相同方法的不同版本,这就是我想要做的似乎不可能(虽然在 Java 中我被允许对类似 List<Value<?>> 的东西使用通配符)。我错了吗?

是否有解决此问题的通用设计,或者我被迫放弃模板来实现它?

最佳答案

#include <iostream>
#include <memory>

class Base 
{
    public: virtual void Print() = 0;
};

template<typename T>
class Derived : public Base
{
    T V;
public:
    void Print() { std::cout << V; }
    Derived(T v) : V(v) { }
};

int main()
{
    std::unique_ptr<Base> Ptr (new Derived<int>(5));
    Ptr->Print();

    return 0;
}

我认为这是不言自明的。

关于C++ 模板 - 具有模板化类型的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13993328/

相关文章:

c++ - 链接错误 : can't figure how to pass/receive arrays as function arguments

c++ - 了解 C++ 中的模板类 - new-operator 的问题

c++ - 我可以使用非模板类专门化可变参数模板模板参数吗?

C#如何使用泛型类型

C#:使用类泛型参数覆盖泛型方法

C++成员函数指针指向全局函数指针

c++ - Qt VirtualKeyboard 启用和禁用键

java - 反序列化JSON时如何区分not-provided和null

c++ - 使用 C++ API 将 mq 客户端连接到具有加密 channel 的 mq 服务器

c++ - 拥有自己的类模板和其他模板参数的 friend