Imbricated C ++模板

时间:2010-03-23 10:00:45

标签: c++ templates

我有以下模式:

template <int a, int b>
class MyClass
{
public:
  template <int c>
  MyClass<a, c> operator*(MyClass<b, c> const &other) const;
};

// ../..

template <int a, int b> template <int c>
MyClass<a, c> MyClass<a, b>::operator*(MyClass<b, c> const &other) const //< error here
{
  MyClass<a, c> result;
  // ..do stuff..
  return result;
}

它不编译,错误信息是

  

错误C2975。错误C2975:'dom':'MyClass'

的参数模板无效

如果我将template <int c>替换为template <int c, int d>并按顺序使用,则可以正常使用。但我希望db具有相同的价值。

我的问题:

  1. 为什么示例不起作用?
  2. 如何强制db相同?
  3. 感谢。

1 个答案:

答案 0 :(得分:5)

以下代码为我编译(应该如此)。

template <int a, int b>
struct MyClass
{
    template <int c>
    MyClass<a, c> operator*(MyClass<c, b> const &other) const;
};

template <int a, int b> template <int c>
MyClass<a, c> MyClass<a, b>::operator*(MyClass<c, b> const &other) const
{
    MyClass<a, c> result;
    return result;
}

int main()
{
    MyClass<1, 2> a;
    MyClass<3, 2> b;
    a * b;
}

请注意,在您的代码中:

  1. 您将返回对临时的引用。
  2. operator *无法从课外访问,因为它是私有的。
  3. 请发布实际代码并指明错误行。