gpt4 book ai didi

c++ - 在模板方法中使用模板类中的模板类

转载 作者:太空狗 更新时间:2023-10-29 21:23:52 27 4
gpt4 key购买 nike

我需要使用在另一个模板类中定义的模板类作为另一个模板的参数作为模板方法中的返回值。我知道这听起来很复杂,下面的代码解释得更好。问题是代码无法编译,它以以下错误结束:

type/value mismatch at argument 2 in template parameter list for 'template<class T, template<class> class Policy> class Result'
expected a class template, got 'CDummy<T2>::Policy2'

但我很确定给定的类(class)可以满足需求。问题是使用它的方法也是模板,因此编译器不知道到底是什么 CDummy<T2>::Policy2是。如果Policy2不会是模板,而是常规类,或者如果我可以填充它的参数,我会使用 typename这会告诉编译器不要担心它,但是如何使用模板来完成呢?

// I cannot change this interface - it's given by a library
template <class T, template <class> class Policy>
class Result : public Policy<T>
{
T data;
};

template <class T>
class Policy1
{

};

// I use this for allowing Policy2 to change behaviour according Dummy
// while it keeps template interface for class above
template <class Dummy>
class CDummy
{
public:
template <class T>
class Policy2 : public Policy1<T>
{

};
};

// Both variables are created ok
Result<int, Policy1 > var1;
Result<int, CDummy<float>::Policy2 > var2;

// This is ok, too
template <class T>
Result<T, Policy1 > calc1()
{
return Result<int, Policy1>();
}

// But this ends with the error:
// type/value mismatch at argument 2 in template parameter list for 'template<class T, template<class> class Policy> class Result'
// expected a class template, got 'CDummy<T2>::Policy2'
template <class T1, class T2>
Result<T1, CDummy<T2>::Policy2 > calc2() // <-- Here is the generated error
{
typedef typename DummyTypedef CDummy<T2>;
return Result<T1, DummyTypedef::Policy2>();
}

注意事项:

  • 我在 GNU/Linux Ubuntu 13.04 中使用 gcc 4.7.3 32 位。 32 位。
  • 由于各种原因,我不能使用 C++11 标准(目前),所以我不能使用模板类型定义

最佳答案

我相信这个名字CDummy<T2>::Policy2是该上下文中的从属名称,您应该使用 template关键字来通知编译器它确实是一个模板。

template <class T1, class T2>
Result<T1, CDummy<T2>::template Policy2 > calc2() // <-- Here is the generated error
// ^^^^^^^^

此外,同一功能的实现似乎也是错误的。 typedef的顺序s 是原名新名CDummy<T2>已知是一种类型(即不需要 typename ):

typedef CDummy<T2> DummyTypedef;

返回语句将是:

return Result<T1, DummyTypedef::template Policy2>();

关于c++ - 在模板方法中使用模板类中的模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17302222/

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