【发布时间】:2020-09-30 22:42:44
【问题描述】:
有没有办法推断列表的类型以避免传递列表应该是的参数类型,只需从第一个元素类型推断它。
template<typename T, T... Args>
struct Calc
{
// do stuff with Args
};
// Usage:
Calc<int, 1, 2, 3>::value;
typename<T... Args> Calc { }; // error T undefined
// Desired:
Calc<1, 2, 3>::value; // auto deduced T = int
Calc<1.0f, 2.0f, 3.0f>::value; // auto deduced T = float
有什么方法可以获得所需的行为,还是我必须将类型作为参数包含在内?
【问题讨论】:
-
您可以尝试使用 dynamic_cast - 如果您知道可能的类型是什么,那就是。
-
不,目前还不能进行这种扣除,虽然之前有人提出过:open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3601.html
-
将值声明为 std::common_type
可能有效吗? -
顺便说一句,您不能将 float 作为非类型模板参数。
-
@Jamboree 与问题无关。