我有一个VS2008 C++程序,其中我正在封装一个C API以在C++程序中使用。如下所示,C API期望一个TABLE_ENTRY值数组。
除了从MyClassCollection :: GetTable()中的每个MyClass结构中复制数据到新的TABLE_ENTRY结构之外,是否有一种方法可以获得我正在寻找的功能?
谢谢, PaulH
除了从MyClassCollection :: GetTable()中的每个MyClass结构中复制数据到新的TABLE_ENTRY结构之外,是否有一种方法可以获得我正在寻找的功能?
谢谢, PaulH
struct TABLE_ENTRY {
const char* description;
DWORD value;
};
class MyClass
{
public:
MyClass( const char* desc, DWORD value ) :
description( desc ),
some_value( 1 )
{
};
TABLE_ENTRY* GetTable()
{
entry_.description = description.c_str();
entry_.value = some_value;
return &entry_;
};
TABLE_ENTRY entry_;
std::string description;
DWORD some_value;
};
class MyClassCollection
{
public:
TABLE_ENTRY* GetTable()
{
return collection_.front()->GetTable();
};
void Add( MyClass* my_class )
{
collection_.push_back( my_class );
}
private:
std::vector< MyClass* > collection_;
};
int _tmain( int argc, _TCHAR* argv[] )
{
MyClass class1( "class1", 1 );
MyClass class2( "class2", 2 );
MyClassCollection collection;
collection.Add( &class1 );
collection.Add( &class2 );
TABLE_ENTRY* table = collection.GetTable();
// table is to be used by the C API. Therefore, these next
// calls should function as shown.
TABLE_ENTRY entry1 = table[ 0 ]; // should be class1's table (works)
TABLE_ENTRY entry2 = table[ 1 ]; // should be class2's table (full of junk)
return 0;
}