不确定我想做的事情是不是很糟糕,但这是我的问题: 我有一些模板功能,如
std::vector<T> operator - (const std::vector<T>& data1, const std::vector<T>& data2);
std::vector<T> operator * (const std::vector<T>& data1, const std::vector<T>& data2);
std::vector<T> operator & (const std::vector<T>& data1, const std::vector<T>& data2);
....等等。除了运算符之外,所有这些函数都具有完全相同的定义,因此我尝试编写像这样的宏
#define _BINARY_OP_ON_DATASET (OP_TYPE)
template <typename T> \
std::vector<T> operator OP_TYPE (const std::vector<T>& data1, const std::vector<T>& data2)\
{\
std::vector<T> result;\
result.push_back(data1.begin().val OP_TYPE data1.begin().val)/*sample implementation*/\
return result;\
}
_BINARY_OP_ON_DATASET (&)
_BINARY_OP_ON_DATASET (+)
我得到了一堆错误
Error 1 error C2833: 'operator OP_TYPE' is not a recognized operator or type
Error 2 error C2988: unrecognizable template declaration/definition
Error 3 error C2059: syntax error : 'newline'
Error 5 error C2143: syntax error : missing ';' before '<'
Error 6 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
......等等 任何人都可以看到这个问题是什么?
感谢您的帮助。
CV
答案 0 :(得分:3)
删除宏名称及其参数之间的空格。
#define _BINARY_OP_ON_DATASET(OP_TYPE)
将\
添加到模板的第一行
#define _BINARY_OP_ON_DATASET(OP_TYPE)\
删除小错误,例如您在函数体第二行中忘记的;
result.push_back(data1.begin().val+data1.begin().val);
它汇编得很好!
答案 1 :(得分:2)
宏参数列表前没有空格!
#define _BINARY_OP_ON_DATASET(OP_TYPE) ...
^^^
答案 2 :(得分:2)
宏参数列表前面有一个无效空格,并且错过了后面的换行符:
#define _BINARY_OP_ON_DATASET(OP_TYPE) \
...
答案 3 :(得分:0)
我认为重复这个定义会比对它们进行宏观操作更简单:)有时候重复自己要比提高打字效率更好。