gpt4 book ai didi

c++ - 名称可以同时引用模板和值吗?

转载 作者:太空宇宙 更新时间:2023-11-04 13:56:07 25 4
gpt4 key购买 nike

我希望能够调用一个带有表示时间量的表达式的等待函数,使用模板参数或函数参数来指定等待的时间量。 (为了增加乐趣:这些声明都在类模板中,因此不允许完全特化。)我的偏好是

wait< ms< 10 >>();
wait( 10 * ms );

但我愿意接受

wait< ms< 10 >>();
wait( ms( 10 ));

我可以制作一个接受模板参数或函数参数的等待函数模板,但对于参数我卡住了。 ms<10> 必须是类型,而不是内置的,比如

template< int n >
struct ms {
typedef void this_is_a_duration;
constexpr int amount = n;
};

所以我可以对 this_is_a_duration 的存在进行编译时“类型检查”。但这似乎排除了 ms 或 ms() 不是类型,对吧?现在似乎有办法在 ms 是一种类型时使 ( 10 * ms ) 成为有效表达式? (如果允许的话,静态转换函数就可以做到。)

有什么办法可以让 ms<10> 成为一个类型,而 ms 或 ms(10) 成为一个表达式吗?

最佳答案

不可以,在同一个查找上下文中,名称只能是函数、变量或类型(包括它们的模板形式)之一。你想做的事是不可能的。

我推荐的是为两者之一的一个单字母命名空间:

wait<s::ms<10>>();

关于c++ - 名称可以同时引用模板和值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21385940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com