C++11 如何在c+中使用可变模板而不递归地形成字符串+;11 模板 void logImpl(tloglevel level,Args&…Args) { ostringstream; (stream

C++11 如何在c+中使用可变模板而不递归地形成字符串+;11 模板 void logImpl(tloglevel level,Args&…Args) { ostringstream; (stream,c++11,variadic-templates,C++11,Variadic Templates,您不需要使用递归来实现这一点 填充时,可以使用扩展参数包创建假数组: template <typename ...Args> void logImpl(tloglevel level, Args&& ...args) { ostringstream stream; (stream << ... << std::forward<Args>(args)) << '\n'; syslog(level,

您不需要使用递归来实现这一点

填充时,可以使用扩展参数包创建假数组:

template <typename ...Args>
void logImpl(tloglevel level, Args&& ...args)
{
    ostringstream stream;
    (stream << ... << std::forward<Args>(args)) << '\n';
    syslog(level, stream.str());
}

func A()
{
int a =10;
std::string b = "test";
logImpl(LOG_INFO, "printing",a,b);
}

func B()
{
unsigned long t = 6700;
logImpl(LOG_INFO, t);
}


嗯,您甚至不使用
toString
,使用
ostringstream
的版本是:

template<class T>
std::string toString(T t){
    return std::to_string(t);   // for numbers 
}

std::string toString(const std::string& str){
    return str;
}

std::string toString(const char* str){
    return str;
}
模板
std::string makeString(Args&&…Args){
std::ostringstream os;

int temp[]={((操作系统我不明白预期的行为是什么。如果您使用递归和/或折叠表达式实现它并将其放在问题中,也许会更清楚,但请提及您希望在C++11中不使用递归来实现它?您应该澄清您想要得到什么。一个接受可变参数并返回串联strin的函数g?
makeString(“abc”,10)
是否应将
ala10
作为std::string返回?我想编写一个函数,该函数采用loglevel和variadic参数,并且该函数应使用variadic参数形成一个字符串。然后我想调用syslog,传递此日志级别和字符串。所谓应形成一个字符串,是指所有参数都连接到字符串?是的,所有参数都连接到字符串应该连接到字符串,我已经更新了原来的帖子
template<class T>
std::string toString(T t){
    return std::to_string(t);   // for numbers 
}

std::string toString(const std::string& str){
    return str;
}

std::string toString(const char* str){
    return str;
}
template<class ... Args>
std::string makeString(Args&&...args){
    std::ostringstream os;
    int temp[] = { ((os << std::forward<Args>(args)),0)... };
    static_cast<void>(temp);
    return os.str();
}