我正在尝试编写一个名为p
的实用程序函数,其中如果传递了一个基本类型,它只打印它,如果传递了p
基本类型,它必须循环它然后打印出来。我尝试了print()
std::vector<int>
,但失败了,主要是因为我不确定c ++中是否允许这样做。如果你能为所有原始类型的向量提供一些通用的方法,那将会非常有用。
std::vector
这是我遇到的错误,如果有帮助:
int
由于
答案 0 :(得分:4)
如果您可以编译C ++ 17,则可以使用if constexpr
if constexpr (std::is_same<T, std::vector<int>>::value)
在C ++ 17之前,您必须开发不同的函数,因为type.begin()
/ type.end()
部分也是在value
为假时编译的(同时T
不是一个std::vector
)。
“拆分”功能的一种可能方法如下
template <typename... Args>
void print (std::ostream& out, std::vector<int> const & v, Args... args)
{
for (auto const & i : v)
out << i << ' ';
print(out, args...);
}
template <typename T, typename... Args>
void print (std::ostream& out, T type, Args... args)
{
out << type;
print(out, args...);
}
或者,如果您想拦截不同的std::vector
类型,您可以模板化T
的{{1}}类型,第一个函数变为
std::vector