gpt4 book ai didi

c++ - 将类型特征与可变参数模板参数一起使用

转载 作者:行者123 更新时间:2023-12-01 14:36:40 27 4
gpt4 key购买 nike

我正在尝试制作一个功能类似于 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*

最佳答案

你不需要std::tuple这样做你可以限制你的功能复制const char*仅使用 std::enable_if ,如下

#include <iostream>
#include <type_traits>


template<typename ... Args>
constexpr std::enable_if_t<std::is_same_v<std::common_type_t<Args...>,const char*>, void>
print(Args&&... args)
{
((std::cout << args << " "),...);
std::cout << '\n';
}
int main( )
{
print("this", "is", "a", "thing");
print("this", "is", "not", "a", "thing");
print(5, "is", "not", "a", "thing");//compile error
return 0;
}

关于c++ - 将类型特征与可变参数模板参数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62775308/

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