C++ 缺少类模板的参数列表,但不包含VisualC++;
对于IAR编译器,我有以下错误: 类模板“CallbackInterface”的参数列表缺失 但在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(
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++来说,它似乎不是隐式的。我看到了重复问题,但我没有找到避免它的方法;也许您可以在类内使用类型定义一个,这样您就可以减少每个类只重复一次。