【问题标题】:Building a Templated Container Class构建模板化容器类
【发布时间】:2017-01-30 15:19:55
【问题描述】:

作为我的自定义对象系统的一部分,我希望有一个 Container 类,它只包装第三方对象,以便它们可以集成到我的容器系统中。

假设我有以下第三方对象,

class Point { 
public:  
  int x;  
  Point(int y = 0) : x(y) {}  
  int value() { return x; } 
};

容器类,

template <typename T, typename... Args> class Container{  
   T dat; 
public:  
   Container(const Args &... args) { dat = T(args...); }  
   T data() { return dat; } 
};

我正在尝试提供以下api,

    Container<Point> v = Container<Point>(1);

我正在尝试将传递给值构造函数的参数直接传递给类型 T 构造函数。

编辑:我收到编译器错误candidate expects 0 arguments, 1 provided errors

【问题讨论】:

  • 那么...您面临什么问题?
  • Container() 构造函数??!!不应该是 Value()?
  • @Quentin 我不工作。我收到一堆candidate expects 0 arguments, 1 provided 错误
  • @chedynajjar 正确复制/粘贴错误已修复。
  • @HamzaYerlikaya 请在您的问题中包含确切的错误,以及足够的代码来重现它们。

标签: c++ c++11 gcc clang


【解决方案1】:

您需要将构造函数模板化为Args...,而不是类:

template <typename... Args>
Container(Args&&... args) : dat(std::forward<Args>(args)...) { }  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多