是否可以同时指定模板类的一部分?(在“ <<”之前和“ <>”内部的部分)

毛泽东|
class trytemplate
{
public:
    //////// 1
    template <typename T>
    trytemplate(const T& p)
    {
        std::cout << p << std::endl;
    }

    //////// 2
    template <typename U>
    trytemplate(const std::vector<U>& p)
    {
        std::cout << p[0] << " " << p.size() << std::endl;
    }

    //////// 3
    template <typename U, typename V>
    trytemplate(const V<U>& p)
    {
        std::cout << p[0] << " " << p.size() << std::endl;
    }
};

ctor 2工作正常,但我想使其类似于3(3不编译)。
这样我可以做类似的事情:

int i = 123;
trytemplate o1(i); // call ctor 1

std::vector<float> v1(1, 123.0f);
trytemplate o2(v1); // ideally can be deduced by compiler, and call ctor 3

MyVector<float> v2(1, 123.0f);
trytemplate o3(v2); // ideally can be deduced by compiler, and call ctor 3

在这种情况下,我可以传入任何类似于矢量的容器,只需确保该类具有operator[]and即可size()

所以问题是:是否可以使ctor像数字3?
还是有更好的方法?

PS:如果有人可以建议一个更好的标题,那么我会更改它,谢谢!

普雷托里亚人

使用模板template参数

template <template<typename> class V, typename U>
trytemplate(const V<U>& p)
{
    std::cout << p[0] << " " << p.size() << std::endl;
}

您还可以添加可变参数模板以接受采用多个模板参数的类模板。

template <template<typename...> class V, typename... Params>
trytemplate(const V<Params...>& p)
{
    std::cout << p[0] << " " << p.size() << std::endl;
}

请注意,如果您使用的是非可变(第一个)版本,则您传入的类模板应仅使用单个模板参数。这意味着它不能与之一起使用,std::vector因为它需要第二个模板参数,即分配器类型(其默认参数为std::allocator<T>)。如果您的编译器不支持可变参数模板(例如不具有Nov CTP的VS2012),请使用此模板

template <template<typename, typename> class V, typename U, typename A>
trytemplate(const V<U, A>& p)
{
    std::cout << p[0] << " " << p.size() << std::endl;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以同时指定模板类的一部分?(在“ <<”之前和“ <>”内部的部分)

来自分类Dev

组合和聚合是否可以共享一部分?

来自分类Dev

在字符串之前和之后提取行的一部分

来自分类Dev

我是否必须在同一部分中定义类的前向声明和接口?

来自分类Dev

仅替换WordPress的存档和单页模板的一部分

来自分类Dev

包含URL的一部分和特定类的匹配链接

来自分类Dev

包含URL的一部分和特定类的匹配链接

来自分类Dev

设置和重置位图的一部分

来自分类Dev

求向量int的一部分的和

来自分类Dev

拦截器和装饰器是否是CDI的一部分?

来自分类Dev

ASCII转义序列和控制字符配对是否是标准的一部分?

来自分类Dev

是否可以仅重新渲染模板的一部分

来自分类Dev

对列表的一部分和另一部分进行排序

来自分类Dev

将内容标签呈现为聚合物和飞镖中模板的一部分

来自分类Dev

Json.NET和一组对象,这些对象是类层次结构的一部分?

来自分类Dev

在最后一个斜杠之前获取行的一部分

来自分类Dev

使用扫描仪在冒号之前的字符串的一部分,然后在冒号之后的字符串的一部分

来自分类Dev

创建具有一部分图像和一部分json的Android REST多部分请求

来自分类Dev

`defaultYesodMiddleware`和`authorizationCheck`是隐藏包的一部分,有什么方法可以重用它们吗?

来自分类Dev

预处理器,汇编器和链接器是否是编译器的一部分?

来自分类Dev

可见性设置为“消失”的视图是否是度量和布局通过的一部分?

来自分类Dev

面向对象的建模和设计是否是软件体系结构的一部分?

来自分类Dev

EKS和/或EKS的一部分是否不需要Kube2iam?

来自分类Dev

将某些内容作为路径的一部分和参数作为参数是否等效?

来自分类Dev

在第二秒之前删除字符串的一部分/

来自分类Dev

删除#anchor之前的href链接的一部分?

来自分类Dev

在单击按钮之前不要加载html的一部分

来自分类Dev

在合并之前删除tex2D的一部分

来自分类Dev

JAXB元帅错误发生之前创建文件的一部分

Related 相关文章

  1. 1

    是否可以同时指定模板类的一部分?(在“ <<”之前和“ <>”内部的部分)

  2. 2

    组合和聚合是否可以共享一部分?

  3. 3

    在字符串之前和之后提取行的一部分

  4. 4

    我是否必须在同一部分中定义类的前向声明和接口?

  5. 5

    仅替换WordPress的存档和单页模板的一部分

  6. 6

    包含URL的一部分和特定类的匹配链接

  7. 7

    包含URL的一部分和特定类的匹配链接

  8. 8

    设置和重置位图的一部分

  9. 9

    求向量int的一部分的和

  10. 10

    拦截器和装饰器是否是CDI的一部分?

  11. 11

    ASCII转义序列和控制字符配对是否是标准的一部分?

  12. 12

    是否可以仅重新渲染模板的一部分

  13. 13

    对列表的一部分和另一部分进行排序

  14. 14

    将内容标签呈现为聚合物和飞镖中模板的一部分

  15. 15

    Json.NET和一组对象,这些对象是类层次结构的一部分?

  16. 16

    在最后一个斜杠之前获取行的一部分

  17. 17

    使用扫描仪在冒号之前的字符串的一部分,然后在冒号之后的字符串的一部分

  18. 18

    创建具有一部分图像和一部分json的Android REST多部分请求

  19. 19

    `defaultYesodMiddleware`和`authorizationCheck`是隐藏包的一部分,有什么方法可以重用它们吗?

  20. 20

    预处理器,汇编器和链接器是否是编译器的一部分?

  21. 21

    可见性设置为“消失”的视图是否是度量和布局通过的一部分?

  22. 22

    面向对象的建模和设计是否是软件体系结构的一部分?

  23. 23

    EKS和/或EKS的一部分是否不需要Kube2iam?

  24. 24

    将某些内容作为路径的一部分和参数作为参数是否等效?

  25. 25

    在第二秒之前删除字符串的一部分/

  26. 26

    删除#anchor之前的href链接的一部分?

  27. 27

    在单击按钮之前不要加载html的一部分

  28. 28

    在合并之前删除tex2D的一部分

  29. 29

    JAXB元帅错误发生之前创建文件的一部分

热门标签

归档