【发布时间】:2020-05-14 23:45:58
【问题描述】:
我想编写一个函数,它将根据函数的类型而不是参数进行操作。因此,该函数不接收基于模板的参数。一般的要点是这样的:
#include <iostream>
void func() {
std::cout<<"End marker\n";
}
template <typename Type, typename... T>
void func() {
std::cout<<"Type sizeof "<<sizeof(T)<<"\n";
func<T...>();
}
int main() {
func<int, int, int>();
}
这当然不能编译。我试过这样做:
template <typename Type, typename... T>
void func() {
std::cout<<"Type sizeof "<<sizeof(T)<<"\n";
if( sizeof...(T)!=0 )
func<T...>();
}
但是,这不起作用。 func<T...> 可能不会被评估,但它确实需要是可编译的。
有没有我想念的方法来做到这一点?
【问题讨论】:
-
if constexpr? -
@Quentin,是的,谢谢。但是,这并不能解决一般情况。我需要定义一个用
func<>()调用的函数,否则会以其他方式失败。 -
@user1810087 在某种意义上说“它不能用函数来完成”,那么是的,它确实:-(。我已经有一个基于结构的实现。它相当 i> 更复杂。
标签: c++ templates visual-c++ variadic-templates specialization