将模板参数插入到ostream中

Inserting template parameters into ostream

本文关键字:ostream 插入 参数      更新时间:2023-10-16

我正在尝试设计一个可变模板,该模板采用参数包(即字符)并立即将这些字符插入cout中。我想象我可以使用一个名为PrintChars的结构,并进行某种模板递归来访问参数包中的每个参数。我已经成功地在运行时做到了这一点,但现在我想在编译时做到这一点。例如,我想让下面的模板调用在终端中打印"foo"。

cout << PrintChars<'f', 'o', 'o'>()

你有什么想法吗?谢谢

这只是处理参数包的一个简单练习。我的PrintChars<...>实际上没有任何状态,它只是传递参数包。

http://ideone.com/39HcTG

#include <iostream>
using namespace std;
template<char... s>
struct PrintChars {};
std::ostream& operator<< (std::ostream& o, const PrintChars<>&)
{
    return o;
}
template<char head, char... tail>
std::ostream& operator<< (std::ostream& o, const PrintChars<head, tail...>& pc)
{
    o << head << PrintChars<tail...>();
    return o;
}
int main() {
    cout << PrintChars<'f', 'o', 'o'>();
    return 0;
}

这里唯一的"元编程"是创建正确嵌套的operator<<调用。