C++ 隐式转换运算符
我想使用C++11的可变模板功能打印函数的所有参数。我做了以下几件事:C++ 隐式转换运算符,c++,gcc,c++11,variadic-templates,explicit-conversion,C++,Gcc,C++11,Variadic Templates,Explicit Conversion,我想使用C++11的可变模板功能打印函数的所有参数。我做了以下几件事: struct concatenate { template< typename ...ARGS > explicit concatenate(ARGS const & ...args) { cat(args...); } /*explicit*/ operator std::string const () const {
struct concatenate
{
template< typename ...ARGS >
explicit
concatenate(ARGS const & ...args)
{
cat(args...);
}
/*explicit*/
operator std::string const () const
{
return oss.str();
}
private :
std::ostringstream oss;
void cat() const
{ ; }
template< typename T, typename ...ARGS >
void cat(T const & head, ARGS const & ...tail)
{
if (oss.tellp() > 0) {
oss << ' ';
}
oss << head;
cat(tail...);
}
};
struct连接
{
模板
明确的
连接(ARGS常量和…ARGS)
{
cat(args…);
}
/*明确的*/
运算符std::string const()const
{
返回oss.str();
}
私人:
std::ostringstream oss;
无效cat()常量
{ ; }
模板
无效猫(T常数和头部,ARGS常数和尾部)
{
if(oss.tellp()>0){
oss因为您没有使用显式转换运算符并且没有重载运算符因为您没有使用显式转换运算符并且没有重载运算符运算符运算符转换运算符是显式的,但是您没有进行显式转换。这没有什么区别。没有explicit
关键字都是一样的。转换运算符是显式的,但您没有进行显式转换。这没有什么区别。没有explicit
关键字都是一样的。
template <class charT, class traits, class T>
basic_ostream<charT, traits>&
operator<<(basic_ostream<charT, traits>&& os, const T& x);
std::string(concatenate(1, 2, 3, 4, std::string("ololo"), "alala", 'o', 1.2, 1.2L, 1.2f))