【发布时间】:2016-07-05 06:00:40
【问题描述】:
我正在尝试实现一个函数,该函数接受可变数量的字符串并转发到打印函数,该函数期望每个字符串都有一个 char 指针和 size,交错。
例子:
std::string a = "123";
std::string b = "1234";
forward(a, b); // should call doPrint(a.c_str(), a.size(), b.c_str(), b.size())
我认为以下应该是正确的实现,但即使它编译了行为,我也很惊讶。
template <class ...Args>
void forward(const Args & ... args) {
doPrint( (args.c_str(), args.size())...);
}
forward(a, b) 调用doPrint(3, 4),而不是doPrint("123", 3, "1234", 4),就好像我写了doPrint((args.size())...)。编译器完全忽略了对c_str() 的调用。
我尝试了g++、clang 和icc,它们都产生了相同的输出。 (args.c_str(), args.size())... 有什么问题?
确实,std::make_tuple(args.c_str(), args.size())... 按预期工作,但假设我无法更改 doPrint 以接受和处理元组。
【问题讨论】:
标签: c++ c++11 variadic-templates