我需要一個具有可變數量參數的模板函數。目前我的問題是通過使用幾個模板函數來解決的。但是現在我需要在我的類函數中做一個包裝方法,以及將這些代碼打包到一個函數中的其他原因。我需要一個具有可變數量參數的模板函數
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)的幫你嗎? –