我具有以下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 );
}
我可以在Windows环境中进行编译。如果我在MacOS上使用gcc
进行尝试,则会出现以下错误:
无法传递非平凡类型'std :: __ 1 :: basic_string'的对象 通过可变参数功能;调用将在运行时中止 [-Wnon-pod-varargs]
gcc设置如下(gcc --version
)
配置为
--prefix = /应用程序/Xcode.app/Contents/Developer/usr
--with-gxx-include-dir = / usr / include / c ++ / 4.2.1
Apple LLVM版本: 10.0.0(clang-1000.11.45.5)
目标:x86_64-apple-darwin18.2.0
线程模型 posix
InstalledDir:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
我想gcc应该有一些选择,以避免我不知道的POD类型检查。
是否有人遇到了同样的问题?
调用string_format
函数的示例代码:
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);
}
}
答案 0 :(得分:1)
%s
格式说明符用于CString。您正在传递std::string
。如果您改为这样做,它将起作用:string_format("%s %ld %ld %ld", label.c_str(), id, reference, value);