C++ 变量参数中的强制转换特定类型
我有一个接受可变参数的模板函数C++ 变量参数中的强制转换特定类型,c++,casting,variadic-templates,variadic-functions,C++,Casting,Variadic Templates,Variadic Functions,我有一个接受可变参数的模板函数 template<typename... Params> void foo(Params... p); 如何进行这种转换?如果您只想转换类型,它只是一个元函数: template<typename T> struct convert { using type = T; }; template<> struct convert<char const*> { using type = Path; }; te
template<typename... Params>
void foo(Params... p);
如何进行这种转换?如果您只想转换类型,它只是一个元函数:
template<typename T> struct convert {
using type = T;
};
template<> struct convert<char const*> {
using type = Path;
};
template<typename T>
using convertCharPointerToPath = typename convert<T>::type;
现在在您的参数包扩展中使用它,就像您在原始帖子中所做的那样。如果您只想转换类型,它只是一个元函数:
template<typename T> struct convert {
using type = T;
};
template<> struct convert<char const*> {
using type = Path;
};
template<typename T>
using convertCharPointerToPath = typename convert<T>::type;
现在在您的参数包扩展中使用它,就像您在原始帖子中所做的那样。不使用traits助手:
template<typename... Params>
void foo(Params... p) {
bar<std::conditional_t<std::is_same<char const*,Params>{},Path,Params>...>(p...);
}
或者,对于过载:
超载随处可见;它获取一组lambda并返回它们的重载集
.没有特征助手:
template<typename... Params>
void foo(Params... p) {
bar<std::conditional_t<std::is_same<char const*,Params>{},Path,Params>...>(p...);
}
或者,对于过载:
超载随处可见;它获取一组lambda并返回它们的重载集
.你的问题是什么?你的问题是什么?你也可以使用std::conditional\u t,但不确定它是否比你的可读性更强。@raket1111-我自己觉得拼写某些元函数更容易理解。当然,条件句也会产生同样的效果。但我认为这更容易扩展到其他类型;您也可以使用std::conditional\u t,但不确定它是否比您所拥有的可读性更强。@raket1111-我自己觉得拼写某些元函数更容易理解。当然,条件句也会产生同样的效果。但我认为这更容易扩展到其他类型;我正试图使用重载版本解决类似的问题,但我无法让它工作。编译器抱怨无法找到重载对象的可行构造函数。问题可能是不同的重载具有不同的返回类型吗?@NikolausDemmel或您想要的重载版本需要{}?还是扣减指南?或者您的编译器不支持演绎指南?很多东西可能会出错。@NikolausDemmel添加了编译实例链接。感谢提供实例。原来我的酒吧里有东西坏了。现在对我有用了。对于重载,您有重载fs&&…->重载;而我有重载FS…->重载;从别的地方来的。就我而言,这两种方法都有效。我真的不明白什么时候会有所不同。@NikolausDemmel使用“提问”按钮提问是件好事我正试图使用重载版本解决类似的问题,但我无法让它工作。编译器抱怨无法找到重载对象的可行构造函数。问题可能是不同的重载具有不同的返回类型吗?@NikolausDemmel或您想要的重载版本需要{}?还是扣减指南?或者您的编译器不支持演绎指南?很多东西可能会出错。@NikolausDemmel添加了编译实例链接。感谢提供实例。原来我的酒吧里有东西坏了。现在对我有用了。对于重载,您有重载fs&&…->重载;而我有重载FS…->重载;从别的地方来的。就我而言,这两种方法都有效。我真的不明白什么时候会有所不同。@NikolausDemmel使用“提问”按钮提问是件好事