【发布时间】:2020-10-27 17:07:59
【问题描述】:
我正在尝试创建一个功能类似于 python 打印函数的打印函数,但我在强制可变参数可以是什么类型时遇到问题,我希望将它们限制为 const char*。
到目前为止,这是我的代码:
#include <tuple>
#include <iostream>
#include <utility>
#include <type_traits>
template<
std::size_t I=0,
typename... Args,
typename FUNCTION
>
constexpr void for_each(const std::tuple<Args...>& t, FUNCTION &&func)
{
if constexpr(I < sizeof...(Args))
{
func(std::get<I>(t));
for_each<I + 1>(t, std::forward<FUNCTION>(func));
}
}
template<
typename... Args
>
constexpr void print(Args... args)
{
std::tuple t(std::forward<Args>(args)...);
for_each(t, [=](const char* str)
{
std::cout << str << " ";
});
std::cout << '\n';
}
int main(void)
{
print("this", "is", "a", "thing");
print("this", "is", "not", "a", "thing");
return 0;
}
我希望print 函数中的可变参数模板参数只接受const char*
【问题讨论】:
-
你为什么要这样限制自己?如果您将
[=](const char* str)更改为[=](const auto& elem )您的 lambda 可以使用任何已定义operator <<的类型。 -
仅供参考:fmt.
标签: c++ templates c++17 variadic-templates variadic