Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.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_Dictionary_Macros_Function Pointers - Fatal编程技术网

C++ 带宏参数的指针函数的映射

C++ 带宏参数的指针函数的映射,c++,templates,dictionary,macros,function-pointers,C++,Templates,Dictionary,Macros,Function Pointers,我正在尝试创建一个包含构造函数的映射。为此,我使用以下方法: 所以在DLL中,我有如下数据结构: namespace pods { struct PODS_API StructExample{ double d; bool b; int i; StructExample() : d(0), b(false), i(0) {}; StructExample(QList<QVariant> paramList) :

我正在尝试创建一个包含构造函数的映射。为此,我使用以下方法:

所以在DLL中,我有如下数据结构:

namespace pods
{


struct PODS_API StructExample{
    double  d;
    bool    b;
    int     i;
    StructExample() : d(0), b(false), i(0) {};
    StructExample(QList<QVariant> paramList) : 
        d(paramList[0].toDouble()), 
        b(paramList[1].toBool()), 
        i(paramList[2].toInt())
    {};
    StructExample(double param_d, bool param_b, int param_i) : d(param_d), b(param_b), i(param_i) {};
};
REGISTER_VARIABLE_TYPE(StructExample);
}
namespace variable{

template <class T>
class VariableT : public AbstractVariableT<T>, public IVariable {

public:
VariableT() {};
VariableT(const QString& name, const QList<QVariant> listParam) : name(name), item(T(listParam)) {};

~VariableT(){};

T* getData()
{
    return &item;
};

void setData(T* t)
{
    item = *t;
};


private:
T item;

};

}
这个问题经过编辑

谢谢你的帮助。
Eric

不清楚你在问什么,你能提供一个答案吗?(只是一个猜测:
VariableT
应该是宏中的
Variable##T
)你好,丹尼尔,谢谢你的帮助。不幸的是,我不能提供SSCCE。但我会尽量说清楚。好的,编辑完成了,有点长。我希望你能更好地理解我的问题。同样,欢迎任何帮助。关于变量,不是这样的。实际上我有一个叫做VariableT的类。
namespace variable
{

#define REGISTER_VARIABLE_TYPE(T) bool isRegistered_##T =     \
VariableFactory::instance()->                                 \
regVariable<T>(#T,  (VariableT<T>::createVariable)(const QString&, const QList<QVariant>&));

template <class T>
class  AbstractVariableT : public QObject
{
public:
static IVariable* createVariable(const QString& name, const QList<QVariant>& listParam) { return new VariableT<T>(name,listParam); }

virtual ~AbstractVariableT(){};


protected: 
QString name;

};

}
namespace variable
{

class  VariableFactory
{

public:

static VariableFactory* instance();


static IVariable* createVariable(const QString& idVariable, const QString& name, const QList<QVariant>& listParam);

template <class T>
bool regVariable(const QString& idVariable, IVariable* (*creator)(const QString&, const QList<QVariant>&))
{
    variableCreators[idVariable] = creator;
    return true;
}


private:
QMap<QString, IVariable* (*)(const QString&, const QList<QVariant>&)> variableCreators;
};
}
"StructExample"/AbstractVariableT::CreateVariable<StructExample>(const QString& name, const QList<QVariant>& listParam);   
#define REGISTER_VARIABLE_TYPE(T) bool isRegistered_##T = VariableFactory::instance()->regVariable<T>(#T,  (VariableT<T>::createVariable)(const QString&, const QList<QVariant>&));
IVariable* VariableFactory::createVariable(const QString& typeVariable, const QString& name, const QList<QVariant>& listParam)
{
    return instance()->variableCreators[typeVariable](name, listParam);
}
Error   1   error C2653: 'VariableFactory' : is not a class or namespace name   
Error   5   error C2275: 'pods::StructExample' : illegal use of this type as an expression  
Error   2   error C2227: left of '->regVariable' must point to class/struct/union/generic type  
Error   8   error C2143: syntax error : missing ')' before 'const'  
Error   4   error C2065: 'VariableT' : undeclared identifier    
Error   7   error C2065: 'createVariable' : undeclared identifier   
Error   9   error C2059: syntax error : ')' 
Error   3   error C2039: 'VariableT' : is not a member of 'variable'    
Error   6   error C2039: 'createVariable' : is not a member of '`global namespace'' 
Error   10  error C1903: unable to recover from previous error(s); stopping compilation