我正在尝试键入一个模板类来接受一个默认的构造函数参数,但我遇到了一个错误。
这很好用:
typedef TransientWriter<DDS::NetAcquire::MeasurandMetaData,
::NetAcquire::MeasurandMetaDataTypeSupport_var,
::NetAcquire::MeasurandMetaDataTypeSupportImpl,
::NetAcquire::MeasurandMetaDataDataWriter,
::NetAcquire::MeasurandMetaDataDataWriter_var,
::NetAcquire::MeasurandMetaDataDataReader,
::NetAcquire::MeasurandMetaDataDataReader_var> Writer;
但是,我希望这个类通过构造函数获取默认的字符串参数。我试过了:
typedef TransientWriter<DDS::NetAcquire::MeasurandMetaData,
::NetAcquire::MeasurandMetaDataTypeSupport_var,
::NetAcquire::MeasurandMetaDataTypeSupportImpl,
::NetAcquire::MeasurandMetaDataDataWriter,
::NetAcquire::MeasurandMetaDataDataWriter_var,
::NetAcquire::MeasurandMetaDataDataReader,
::NetAcquire::MeasurandMetaDataDataReader_var>
(::NetAcquire::MeasurandMetaDataTopic) Writer;
这给了我一个胡思乱想的错误:error: expected initializer before ‘Writer’
我也试过这个:
typedef TransientWriter<DDS::NetAcquire::MeasurandMetaData,
::NetAcquire::MeasurandMetaDataTypeSupport_var,
::NetAcquire::MeasurandMetaDataTypeSupportImpl,
::NetAcquire::MeasurandMetaDataDataWriter,
::NetAcquire::MeasurandMetaDataDataWriter_var,
::NetAcquire::MeasurandMetaDataDataReader,
::NetAcquire::MeasurandMetaDataDataReader_var>
Writer(::NetAcquire::MeasurandMetaDataTopic);
给了我error: typedef ‘JARSS::DDS::Object::NetAcquire::MeasurandMetaData::Writer’ is initialized (use decltype instead)
我是否会对这种类型的错误感到错误?对于我能做什么有什么建议吗?
感谢。
答案 0 :(得分:1)
无法在C ++中执行此操作。
考虑创建一个新类,向TransientWriter<DDS::NetAcquire::MeasurandMetaData, ::NetAcquire::MeasurandMetaDataTypeSupport_var, ::NetAcquire::MeasurandMetaDataTypeSupportImpl, ::NetAcquire::MeasurandMetaDataDataWriter, ::NetAcquire::MeasurandMetaDataDataWriter_var, ::NetAcquire::MeasurandMetaDataDataReader, ::NetAcquire::MeasurandMetaDataDataReader_var>
的构造函数添加重载或创建工厂函数。
答案 1 :(得分:1)
看起来你试图滥用typedef
来创建本质上是一个新的类声明 - 一个带有一个构造函数,该构造函数在typedef
的类中不存在来自。
你不能这样做,因为那不是typedef
所做的。 typedef
确实创建了一个唯一类型 - 但是这个唯一类型实际上只是某个其他类型的别名。昵称,如果你愿意的话。
typedef
也不会转换为执行的代码。也就是说,没有被调用的typedef
函数。它只是创建一个别名。
答案 2 :(得分:0)
根据您在评论部分中的说明,您尝试执行以下操作:
struct A
{
A(int a) : data(a) {}
};
typedef A (10) MyA;
相反,您可以将A
更改为:
struct A
{
A() : data(10) {}
};
如果您无法修改A
,请创建一个子类,用您需要的内容初始化A
:
struct A
{
A(int a) : data(a) {}
};
struct MyA : public A
{
MyA() : A(10) {}
};