C++ 创建具有变量参数类型的方法

C++ 创建具有变量参数类型的方法,c++,protocol-buffers,C++,Protocol Buffers,我想创建一个具有变量参数类型的方法。 我正在写一个库,需要有这个,因为你不能确定是哪种类型 用户想要使用的对象的名称 它是一种序列化使用Google ProtocolBuffer创建的对象的方法,但是ProtocolBuffer对象可以是不同类型的(名称可以更改) 这可能吗?我试过这个,但不起作用: template <class X> void Base::Send(X data) { // Serialize to string. std::string send

我想创建一个具有变量参数类型的方法。 我正在写一个库,需要有这个,因为你不能确定是哪种类型 用户想要使用的对象的名称

它是一种序列化使用Google ProtocolBuffer创建的对象的方法,但是ProtocolBuffer对象可以是不同类型的(名称可以更改)

这可能吗?我试过这个,但不起作用:

template <class X>
void Base::Send(X data)
{
    // Serialize to string.
    std::string sendData;
    data.SerializeToString(&sendData);

    // Convert data to const char*
    const char* dataToSend = sendData.c_str();

    int iResult;
    iResult = send( ConnectSocket, dataToSend, (int)strlen(dataToSend), 0 );
    if (iResult == SOCKET_ERROR) 
    {
        printf("send failed with error: %d\n", WSAGetLastError());
        closesocket(ConnectSocket);
        WSACleanup();
        exit(1);
    }
}
模板
void Base::Send(X数据)
{
//序列化为字符串。
std::字符串sendData;
data.SerializeToString(&sendData);
//将数据转换为常量字符*
const char*dataToSend=sendData.c_str();
国际结果;
iResult=send(ConnectSocket,dataToSend,(int)strlen(dataToSend),0);
if(iResult==SOCKET\u错误)
{
printf(“发送失败,错误:%d\n”,WSAGetLastError());
闭合插座(连接插座);
WSACleanup();
出口(1);
}
}

“我试过这个,但不起作用”什么特别不起作用?
data.SerializeToString(&sendData)可能是错误的。AFAIR此方法采用的是
std::string&
而不是
std::string*
!好的,我在使用我的库(包含上面的代码)的应用程序中调用这个方法,它返回:
错误LNK2019:未解析的外部符号“public:void uu thiscall NetworkingLib::Base::Send(class data::data)”($Send@VData@资料@@@Base@NetworkingLib@@QAEXVData@data@@@Z) 在函数中引用“private:void\uu thiscall场景::SendPlayerData(void)”(?SendPlayerData@Scene@@AAEXXZ)
SerializeToString(&sendData)确实有效。我在实现此功能之前尝试过。您还知道您不能在单独的编译单元中实现模板吗?