我需要一个具有可变数量参数的模板函数。目前我的问题是通过使用几个模板函数来解决的。但是现在我需要在我的类函数中做一个包装方法,以及将这些代码打包到一个函数中的其他原因。我需要一个具有可变数量参数的模板函数
static void sendData(SSL *ssl, Command com)
{
std::string comStr(COM_SIZE, ' ');
memcpy(&comStr[0], &com, COM_SIZE);
sslWrite(ssl, comStr);
}
template<class T>
void sendData(SSL *ssl, Command com, const T &t)
{
std::string serialArg;
OByteStream obs(serialArg);
obs << t;
obs.flush();
const int serialArgSize = serialArg.size();
std::string comAndSerialData(COM_SIZE + serialArgSize, ' ');
memcpy(&comAndSerialData[0], &com, COM_SIZE);
memcpy(&comAndSerialData[COM_SIZE], &serialArg[0], serialArgSize);
sslWrite(ssl, comAndSerialData);
}
template<class T1, class T2>
void sendData(SSL *ssl, Command com, const T1 &t1, const T2 &t2)
{
std::string serialArgs;
OByteStream obs(serialArgs);
obs << t1 << t2;
obs.flush();
const int serialArgsSize = serialArgs.size();
std::string comAndSerialData(COM_SIZE + serialArgsSize, ' ');
memcpy(&comAndSerialData[0], &com, COM_SIZE);
memcpy(&comAndSerialData[COM_SIZE], &serialArgs[0], serialArgsSize);
sslWrite(ssl, comAndSerialData);
}
template<class T1, class T2, class T3>
void sendData(SSL *ssl, Command com, const T1 &t1, const T2 &t2, const T3 &t3)
{
std::string serialArgs;
OByteStream obs(serialArgs);
obs << t1 << t2 << t3;
obs.flush();
const int serialArgsSize = serialArgs.size();
std::string comAndSerialData(COM_SIZE + serialArgsSize, ' ');
memcpy(&comAndSerialData[0], &com, COM_SIZE);
memcpy(&comAndSerialData[COM_SIZE], &serialArgs[0], serialArgsSize);
sslWrite(ssl, comAndSerialData);
}
//...
如何在一个函数中编写该函数?
这是我尝试使用可变参数模板
void flush(OByteStream &obs)
{
obs.flush();
}
template<typename T, typename... Targs>
void flush(OByteStream &obs, T value, Targs... Fargs)
{
obs << value;
flush(obs, Fargs);
}
template<typename... Targs>
void sendData(SSL *ssl, Command com, Targs... Fargs)
{
std::string serialArgs;
OByteStream obs(serialArgs);
flush(obs, Fargs);
const int serialArgsSize = serialArgs.size();
std::string comAndSerialData(COM_SIZE + serialArgsSize, ' ');
memcpy(&comAndSerialData[0], &com, COM_SIZE);
memcpy(&comAndSerialData[COM_SIZE], &serialArgs[0], serialArgsSize);
sslWrite(ssl, comAndSerialData);
}
flush(obs, Fargs);
- 错误C3520: 'Fargs':参数包必须在这方面
尚未[可变参数模板参数包(http://en.cppreference.com/w/cpp/language/parameter_pack)的帮你吗? –