使用类型名使用模板转发类声明

克里斯

我有以下情况:-

template<typename Derived, typename ValType>
class foo
{
public:
    template<typename R>
    bar<typename std::vector<R>::const_iterator> select()
    {
        std::vector<R> translation;

        return bar<typename std::vector<R>::const_iterator>(std::move(translation));
    }
};

template<typename T>
class bar
    : public foo<bar<T>, typename std::iterator_traits<T>::value_type>
{
public:
    bar(std::vector<typename std::iterator_traits<T>::value_type>&& vec)
    {

    }
};

从根本上来说,这是我正在使用CRTP且foo是mixin的概念证明。

问题是我相信我应该使用前向声明,但是我尝试了以下操作:-

class bar; // I didn't expect this to work

但是我确实希望它能工作:-

template<typename R>
class bar;

直到我真正调用select()为止,编译都很好

std::vector<int> enumerable_vector;
enumerable_vector.push_back(1);
enumerable_vector.push_back(2);

bar<typename std::vector<int>::const_iterator> baz(std::move(enumerable_vector));
baz.select<std::string>();

导致以下错误:-

错误错误C2027:使用未定义类型'foo :: bar'

任何帮助将不胜感激,谢谢!

大卫·罗德里格斯(DavidRodríguez)-德里贝斯

错误错误C2027:使用未定义类型'foo :: bar'

该错误消息似乎表明,你向前声明嵌套类型barfoo您需要转发声明正确的类型(将的声明bar移到的定义上方的名称空间级别foo

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用类型名使用模板转发类声明

来自分类Dev

使用参数包作为模板类的类型名

来自分类Dev

转发声明模板类的typedef

来自分类Dev

容器/类型名转发的递归模板类型

来自分类Dev

如何转发声明应属于类的模板化类型?

来自分类Dev

使用模板别名(类型别名,使用C ++ 11)弃用模板化的类名吗?

来自分类Dev

如何转发声明要使用typedef创建的类型?

来自分类Dev

用模板别名(类型别名,使用C ++ 11)弃用模板化类名吗?

来自分类Dev

使用声明来表示模板声明中的类型

来自分类Dev

我如何使用模板类作为另一个类的类型名?

来自分类Dev

如何使用模板声明成员函数?(不是模板类)

来自分类Dev

Cython:在类型声明中使用导入的类

来自分类Dev

在没有模板参数的类模板中使用类名

来自分类Dev

如何使用类的类型作为模板的参数

来自分类Dev

使用模板的多态类型的代理类

来自分类Dev

使用基于类实例类型的模板

来自分类Dev

使用模板的多态类型的代理类

来自分类Dev

模板类/函数中的交叉转发声明

来自分类Dev

转发声明类模板的成员枚举

来自分类Dev

在类声明中使用自己的类作为类型参数约束

来自分类Dev

从模板类继承,在子类中声明类型

来自分类Dev

从转发声明的类的函数中获取返回类型

来自分类Dev

使用专门的可变参数模板类的声明

来自分类Dev

使用专门的可变参数模板类的声明

来自分类Dev

使用来自基类的声明的c ++模板

来自分类Dev

使用类作为带有前向声明的模板化类的模板参数

来自分类Dev

C ++:使用删除器转发可重复的唯一指针的类的声明

来自分类Dev

我如何在c ++中稍后转发类的声明并使用其成员函数?

来自分类Dev

使用STL容器转发对象的声明

Related 相关文章

  1. 1

    使用类型名使用模板转发类声明

  2. 2

    使用参数包作为模板类的类型名

  3. 3

    转发声明模板类的typedef

  4. 4

    容器/类型名转发的递归模板类型

  5. 5

    如何转发声明应属于类的模板化类型?

  6. 6

    使用模板别名(类型别名,使用C ++ 11)弃用模板化的类名吗?

  7. 7

    如何转发声明要使用typedef创建的类型?

  8. 8

    用模板别名(类型别名,使用C ++ 11)弃用模板化类名吗?

  9. 9

    使用声明来表示模板声明中的类型

  10. 10

    我如何使用模板类作为另一个类的类型名?

  11. 11

    如何使用模板声明成员函数?(不是模板类)

  12. 12

    Cython:在类型声明中使用导入的类

  13. 13

    在没有模板参数的类模板中使用类名

  14. 14

    如何使用类的类型作为模板的参数

  15. 15

    使用模板的多态类型的代理类

  16. 16

    使用基于类实例类型的模板

  17. 17

    使用模板的多态类型的代理类

  18. 18

    模板类/函数中的交叉转发声明

  19. 19

    转发声明类模板的成员枚举

  20. 20

    在类声明中使用自己的类作为类型参数约束

  21. 21

    从模板类继承,在子类中声明类型

  22. 22

    从转发声明的类的函数中获取返回类型

  23. 23

    使用专门的可变参数模板类的声明

  24. 24

    使用专门的可变参数模板类的声明

  25. 25

    使用来自基类的声明的c ++模板

  26. 26

    使用类作为带有前向声明的模板化类的模板参数

  27. 27

    C ++:使用删除器转发可重复的唯一指针的类的声明

  28. 28

    我如何在c ++中稍后转发类的声明并使用其成员函数?

  29. 29

    使用STL容器转发对象的声明

热门标签

归档