【发布时间】:2020-07-27 13:21:48
【问题描述】:
#define BINDINGTEMPLATE template<typename T, typename = typename std::enable_if_t < std::is_same_v<typename std::decay_t<T>, int> || std::is_same_v<typename std::decay_t<T>, std::string> || std::is_same_v<typename std::decay_t<T>, char>>>
这样的做法是不好的吗?
我在同一个类中多次使用这个函数模板。
BINDINGTEMPLATE
void myFunction(int x, int y)
{
// do something specialised based on input template
}
例如,我需要在很多功能中使用它,比如这个:
【问题讨论】:
-
什么是“不良做法”纯粹是基于意见。虽然,是的。你为什么要使用宏而不是类型特征?
-
你是什么意思?我怎样才能多次重写这个模板呢?
-
如果没有宏也可以实现,那么这是不好的方法,因为宏有很多缺点。所以请描述一下这个宏应该做什么。
-
我在代码中添加了一个示例。 @MarekR
-
顺便说一句,SFINAE 可以很好地在不同的替代重载之间进行选择,如果您只有一个重载,如您的示例中那样,与更简单的
static_asserts 相比,SFINAE 没有任何好处
标签: c++ templates sfinae typetraits function-templates