C++ C++;关于MacOS吊舱类型检查

C++ C++;关于MacOS吊舱类型检查,c++,macos,variadic-functions,C++,Macos,Variadic Functions,我有以下C++函数: using namespace std; template<typename ... Args> string string_format( const std::string& format, Args ... args ) { size_t size = snprintf( nullptr, 0, format.c_str(), args ...) + 1; std::unique_ptr<char[]> buf(

我有以下C++函数:

using namespace std;

template<typename ... Args>

string string_format( const std::string& format, Args ... args )
{
    size_t size = snprintf( nullptr, 0, format.c_str(), args ...) + 1; 
    std::unique_ptr<char[]> buf( new char[ size ] ); 
    snprintf( buf.get(), size, format.c_str(), args ... );
    return string( buf.get(), buf.get() + size - 1 ); 
}

%s
格式说明符用于CString。您正在传递一个
std::string
。如果您改为这样做,它将起作用:
string\u格式(“%s%ld%ld%ld”,label.c\u str(),id,reference,value)

这是一个旧的gcc编译器。尝试使用一个新版本(VS也是一个新版本?)你能给我们一个导致错误的完整工作示例吗,在我看来,指出的错误不是你给出的代码中的int…是的,你用@MatthieuBrucher将
string\u格式
称为什么?@MatthieuBrucher它根本不是gcc;它是苹果公司定制的叮当声。你没有发布显示你如何使用模板的代码
class Node
{
public:
  int id;
  int reference;
  int value;
  std::string label;

  std::string describe()
  {
     return string_format("%s %ld %ld %ld", label, id, reference, value);
  } 
}