Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有额外模板参数的构造函数_C++_Templates - Fatal编程技术网

C++ 具有额外模板参数的构造函数

C++ 具有额外模板参数的构造函数,c++,templates,C++,Templates,这个问题似乎与下面的问题密切相关,但我还没有完全理解它 我希望有一个模板类,根据另一个模板类型在构造函数中执行一些非平凡的操作。这里有一个最简单的例子: template <typename A> class Class { public: template <typename B> Class(); private: int i; }; template <typename A, typename B> Class<

这个问题似乎与下面的问题密切相关,但我还没有完全理解它

我希望有一个模板类,根据另一个模板类型在构造函数中执行一些非平凡的操作。这里有一个最简单的例子:

template <typename A>
class Class {
  public:
    template <typename B>
    Class();

  private:
    int i;
};

template <typename A, typename B>
Class<A>::Class() {
    B b;

    i = b.get_number();
}

是否有任何方法可以控制模板参数B对构造函数的影响?还是必须将其附加到整个类?

模板类中模板方法的类外定义的正确语法如下所示:

template <typename A> // Class template parameters
template <typename B> // Method template parameters
Class<A>::Class() { 
//   ^^^
//   Class template parameters

    // ...
}

模板类中模板方法的类外定义的正确语法如下所示:

template <typename A> // Class template parameters
template <typename B> // Method template parameters
Class<A>::Class() { 
//   ^^^
//   Class template parameters

    // ...
}

这也适用于嵌套类,模板外部::内部::MethodC参数等非常有趣!现在那部分起作用了!谢谢。这也适用于嵌套类,模板外部::内部::MethodC参数等非常有趣!现在那部分起作用了!谢谢。这样一个构造器有什么意义?巴里:这是我接下来要问的问题。我在c类中遇到语法错误;。“所以我需要注入一些虚拟变量,以便正确推导出类型?”MartinUeding在你链接的一个问题中提出并回答了一个问题。这样的构造函数有什么意义?巴里:这是我接下来要问的问题。我在c类中遇到语法错误;。“所以我需要注入一些虚拟变量,以便正确推导类型?”MartinUeding在您链接的一个问题中提出并回答了一个问题。
template <typename A, typename B>
class Class {
  public:
    Class();

  private:
    int i;
};

template <typename A, typename B>
Class<A, B>::Class() {
    B b;

    i = b.get_number();
}
template <typename A> // Class template parameters
template <typename B> // Method template parameters
Class<A>::Class() { 
//   ^^^
//   Class template parameters

    // ...
}