【发布时间】:2017-12-16 18:46:22
【问题描述】:
我有以下专门化的模板函数:
// Pass the argument through ...
template<typename T, typename U=T>
U convert(T&& t) {
return std::forward<T>(t);
}
// ... but convert std::strings
const char* convert(std::string s) {
return s.c_str();
}
如果我有一个可变参数模板函数,例如:
template<typename ... Args>
void doSomething(Args ... args) {
// Convert parameter pack using convert function above
// and call any other variadic templated function with
// the converted args.
}
有没有办法像评论中那样使用convert函数转换参数包?
我最初的目标是能够在类似 printf 的函数中将 std::string 传递给“%s”,而无需先手动调用字符串上的 .c_str()。但我也很感兴趣,如果这可以通过简单的方式完成,我的尝试到目前为止都失败了。
【问题讨论】:
-
顺便说一句,您的
doSomething不接受转发引用,而convert暗示它应该接受。convert(std::string)也返回一个悬空指针。所以你可能想做一些改变。 -
@StoryTeller 如果我按照建议只想打印它,我认为指针没问题,因为我不打算保留它?
-
s是本地转换。怎么会没事? -
@StoryTeller 好的,我看到字符串是按值获取的,我可以改用引用。
标签: c++ templates metaprogramming variadic-templates