gpt4 book ai didi

c++ - 专业类中的模板别名

转载 作者:行者123 更新时间:2023-11-30 01:46:21 25 4
gpt4 key购买 nike

下面的代码给出了错误(在我定义测试的那一行):

error C2143: syntax error: missing ';' before '<' note: see reference to class template instantiation 'ptc::Produce' being compiled error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

有人知道为什么会这样吗?编译器是VC2015 CTP1。

编辑:错误一定发生在模板解析的第一阶段,因为即使我从未实例化 Produce 类也会发生。

namespace OrderPolicy
{
struct Unordered {};
struct Ordered {};
};

template <typename TOrderPolicy>
struct OrderManager {};

template<>
struct OrderManager<OrderPolicy::Unordered>
{
template <typename TItem>
using item_t = TItem;
};

template<>
struct OrderManager<OrderPolicy::Ordered>
{
template <typename TItem>
using item_t = TItem*;
};

template<typename TOrderPolicy>
struct Produce : public OrderManager<TOrderPolicy>
{
item_t<int> test;
//using item_type = item_t<int>;
};

Edit2:当我将代码的最后一部分更改为

struct Produce : public OrderManager<OrderPolicy::Ordered>
{
item_t<int> test;
//using item_type = item_t<int>;
};

最佳答案

item_t<int> test;

从基类命名依赖模板类型。在这种情况下,您需要告诉编译器 item_t 是您基类中的一个类型,并且它是一个模板。

执行此操作的直接方法是使用 typename and template :

typename OrderManager<TOrderPolicy>::template item_t<int> test;

如您所见,这将很快变得不可读。我会制作一些本地别名以使代码更整洁:

using Base = OrderManager<TOrderPolicy>;
using item_type = typename Base::template item_t<int>;
item_type test;

关于c++ - 专业类中的模板别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33344796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com