C++ 缺少类模板的参数列表,但不包含VisualC++;

C++ 缺少类模板的参数列表,但不包含VisualC++;,c++,visual-c++,compiler-errors,variadic-templates,iar,C++,Visual C++,Compiler Errors,Variadic Templates,Iar,对于IAR编译器,我有以下错误: 类模板“CallbackInterface”的参数列表缺失 但在VisualC++中,它的编译非常有魅力 怎么解释呢 这是我的回调接口 template<typename DataModel, typename... ArgumentType> class CallbackInterface : public DataModel { public: CallbackInterface() {}; ~CallbackInterface(

对于IAR编译器,我有以下错误: 类模板“CallbackInterface”的参数列表缺失 但在VisualC++中,它的编译非常有魅力

怎么解释呢

这是我的回调接口

template<typename DataModel, typename... ArgumentType>
class CallbackInterface : public DataModel
{
public:
    CallbackInterface() {};
    ~CallbackInterface() {};
    CallbackInterface(ArgumentType... arg) : DataModel(arg...) {};

protected:
    ///Callback methods
    static bool AlwaysDisplayable(DataModel* baseInstance) { return true; };
};
模板
类回调接口:公共数据模型
{
公众:
CallbackInterface(){};
~CallbackInterface(){};
CallbackInterface(ArgumentType…arg):数据模型(arg…{};
受保护的:
///回调方法
静态bool AlwaysDisplayable(DataModel*baseInstance){return true;};
};
以下是我对该界面的专门化:

template<typename DataModel, typename... ArgumentType>
class ThisCallbackInterface : public CallbackInterface<DataModel, ArgumentType...>
{
public:
    ThisCallbackInterface() {};
    ~ThisCallbackInterface() {};
    ThisCallbackInterface(ArgumentType... arg) : CallbackInterface(arg...) {};
模板
类ThisCallbackInterface:公共CallbackInterface
{
公众:
ThisCallbackInterface(){};
~ThisCallbackInterface(){};
ThisCallbackInterface(ArgumentType…arg):CallbackInterface(arg…{};
我的最后一节儿童课:

using DataType = Something;

struct DataModel 
{
  DataModel(){};
  DataModel(DataType dataArgs){};
};

class Child: public CallbackStore<DataModel>, public ThisCallbackInterface<DataModel,DataType>
{
public:
    Child(DataType dataArgs) : 
        CallbackStore(this),
        ThisCallbackInterface(dataArgs){};
    Child():
        CallbackStore(nullptr),
        ThisCallbackInterface(){};
    ~Child(){};
};
使用DataType=Something;
结构数据模型
{
DataModel(){};
数据模型(数据类型dataArgs){};
};
类子级:publicCallbackStore、publicThisCallbackInterface
{
公众:
子(数据类型dataArgs):
CallbackStore(这个),
这个回调接口(dataArgs){};
Child():
CallbackStore(nullptr),
ThisCallbackInterface(){};
~Child(){};
};

可能会解释
回调接口的模板参数

  ThisCallbackInterface(ArgumentType... arg)
     : CallbackInterface<DataModel, ArgumentType...>(arg...)
   { } // ..............^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ThisCallbackInterface(ArgumentType…arg)
:回调接口(arg…)
{ } // ..............^^^^^^^^^^^^^^^^^^^^^^^^^^^^

什么是IAR?我假设您的错误在
这个回调接口(ArgumentType…arg)中
constructor?你能发展一下关于ctor的想法吗?IAR?see Clang要求在基本构造调用中使用完整的模板参数,即使tho建议,也不必这样做。试试@max66写的东西,看看是否有用。确实如此。:@GuillaumeD-对不起;我的英语很糟糕;可能是“解释”?我应该如何使参数显式?我不是已经在类子声明中使用这个回调接口了吗?@GuillaumeD-Ad据我所知,如果您从
foo
继承,您必须初始化
foo
,而不是
foo
。它不应该是隐式的吗?因为这意味着要在构造函数中重写模板arg列表Tor可能是一个错误的来源。它用VisualC++编写。我会试试。谢谢。@我们应该看看标准,对于这种事情,至少是复杂的(至少对我来说)。;无论如何,对于clang++和g++来说,它似乎不是隐式的。我看到了重复问题,但我没有找到避免它的方法;也许您可以在类内使用类型定义一个
,这样您就可以减少每个类只重复一次。