我希望能够使用表达时间量的表达式来调用wait函数,使用模板参数或函数参数来指定等待的时间量。 (为了增加乐趣:这些声明都在类模板中,因此不允许完全专门化。)我的偏好是
wait< ms< 10 >>();
wait( 10 * ms );
但我愿意接受
wait< ms< 10 >>();
wait( ms( 10 ));
我可以创建一个接受模板参数或函数参数的等待函数模板,但是对于参数我被卡住了。 MS&LT; 10>必须是类型,而不是内置类似的东西,如
template< int n >
struct ms {
typedef void this_is_a_duration;
constexpr int amount = n;
};
所以我可以为this_is_a_duration的存在编译时间'type-cheking'。但这似乎排除ms或ms()不是一种类型,对吧?当ms是一个类型时,似乎现在有办法使(10 * ms)成为一个有效的表达式? (如果允许的话,静态转换函数会这样做。)
我有什么方法可以制作ms&lt; 10&gt;是一个类型,ms或ms(10)是一个表达式?
答案 0 :(得分:0)
不,在同一查找上下文中,名称只能是函数,变量或类型之一(包括每个的模板形式)。你想做什么是不可能的。
我建议的是两个中的一个的单字母命名空间:
wait<s::ms<10>>();
答案 1 :(得分:0)
这是我能想象的最接近的:
#include <iostream>
struct ms {
unsigned value;
ms(unsigned value)
: value(value)
{}
};
template <unsigned N, typename Unit>
void wait() {
std::cout << "Template\n";
}
void wait(const ms&) {
std::cout << "No Template\n";
}
int main() {
wait<10, ms>();
wait(ms(10));
return 0;
}