我正在使用Visual Studio 2010进行win32应用程序开发。尝试编译一个已经在GCC(Linux)中编译的现有c ++源文件。
#define DEFINE_PORT( parentClass, portClass, name, dataMember, callbacks,... )
do
{
dataMember = new portClass<parentClass>( *this, callbacks );
err = addProvidesPort( name, dataMember );
}
while(0)
我在这里调用此函数:
DEFINE_PORT( Service_impl,
ECPDataStoreProvidesPort,
ECP_DATA_STORE,
pECPDataStorePP,
&Service_impl::GetDataVersion,
&Service_impl::SetDataVersion,
&Service_impl::LoadData,
&Service_impl::StoreData,
&ECPService_impl::EnableBlobOperations,
&ECPService_impl::GetCurrentPersonalityIndex,
&ECPService_impl::SwapPersonalities,
&ECPService_impl::UpdateDataStoreBlob,
&ECPService_impl::ExtractDataStoreBlob,
&ECPService_impl::GetConstantPersonalityPtr );
ECPDataStoreProvidesPort
类的构造函数定义为10个参数。
这里VS编译器不考虑变量长度参数并产生错误,因为portclass
没有为两个结果定义重载构造函数。
有人可以帮我解决这个问题吗?可能是什么原因以及如何处理此错误?
答案 0 :(得分:1)
在您的扩展中,callbacks
设置为&Service_impl::GetDataVersion
,其余参数(...
)将被忽略。
...
参数应该在宏体中称为__VA_ARGS__
。
#define DEFINE_PORT( parentClass, portClass, name, dataMember, ... )\
do \
{ \
dataMember = new portClass<parentClass>( *this, __VA_ARGS__ );\
err = addProvidesPort( name, dataMember ); \
} \
while(0)