类型的宏定义不起作用
Macro define for type is not working
为什么下面的代码不工作?
// Template function definition
template <typename T>
void apply(const T& input);
// Helper macro definition
#define APPLY_FUNCTION(PIXELTYPE)
apply<##PIXELTYPE>(input);
// Use macro to call function
APPLY_FUNCTION(uint8_t);
这会产生以下错误:
错误:粘贴"<"answers"uint8_t"没有给出有效的预处理令牌
##
用于将令牌粘贴在一起。你不需要这个,所以只要:
#define APPLY_FUNCTION(PIXELTYPE) apply<PIXELTYPE>(input);
也就是说,有两个指导方针:
- 不要用
;
结束你的宏,要求用户添加它会使你避免一些bug。 请不要写这个宏。
为什么要指定模板参数的类型呢?如果你不是特别想要一个宏,那么直接使用apply函数就可以了:
template <class T>
void apply(const T & input)
{
//...
}
apply(1.0f); // Will instantiate apply<float> to match the input's type
如果您希望类型T
与传入的类型不同,那么我建议使用以下模板:
template <class T, class Input>
void apply(const Input & input)
{
T t(input);
//...
}
,然后可以用:
apply<uint8_t>(1.0f);
根本不需要这个宏
在宏展开中,##
告诉编译器将其前面的令牌与后面的令牌组合起来,并将结果视为单个令牌。正如错误消息所说,<uint8_t
不是一个有效的令牌。把##
去掉
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 双链表的自定义实现不起作用(教育)
- C++结构模板变量快捷方式定义不起作用
- set_interaction自定义矢量不起作用的示例
- C ++函数重新定义(代码不起作用 - 逻辑错误)
- 我可以使用常量定义数组的长度,那么为什么 int d[b] 不起作用呢?
- 即使我正在.cpp文件中实例化一个伪对象,.cpp文件内模板函数的定义也不起作用
- 自定义类型转换运算符在转发引用上调用时不起作用(当对象按值传递时有效)
- For 和 while 循环在全局定义的函数中不起作用
- 任务计划程序库的预处理不起作用 - 多定义错误
- C++宏"##"在"->"运算符后不起作用
- C 自定义比较器不起作用
- std::sort 在我的自定义迭代器上不起作用
- 隐式用户定义的转换不起作用,因为在编译C 时无法识别运算符和转换构造函数
- 带有自定义数字的阶乘函数不起作用
- 伯克利数据库 Db->get 使用自定义比较函数时不起作用
- clang不起作用.未定义的符号错误.代码在海湾合作委员会中罚款
- 定义 printf 的宏时__LINE__宏不起作用
- 类型的宏定义不起作用