![](/img/trans.png)
[英]Initialization Lists - Can I initialize members with other members of the same class?
[英]Given a class member, how can I access other members of the same class?
我有两个班级,我称他们为“foo”和“bar”。 "foo" 有两个公共成员:(一个字符串作为它的名字和一个类型为 "bar" 的向量)。
class bar {
//not important
};
class foo {
public:
std::string fooName;
std::vector<bar> bars;
}
如果我有一个 bar 元素,我如何访问和打印其对应的 fooName? 我正在考虑这些方面的事情,但我不知道如何填写空白:
std::cout << bars[index].__________.fooName;
当我尝试用谷歌搜索答案时,我只能找到人们询问有关访问其他类的私有成员的问题。
所以我不完全确定这是否是你所追求的,但如果你的foo
object 包含bar
对象的集合,那么你应该知道要打印哪个foo
对象名称。
struct Bar
{ std::string name; };
struct Foo
{
Foo( std::string fooName )
: name{ std::move( fooName ) } { }
void AddBar( Bar bar )
{ bars.push_back( std::move( bar ) ); }
bool Contains( std::string_view barName ) const
{
return ( std::find_if( std::begin( bars ), std::end( bars ),
[ &barName ]( const Bar& bar ) {
return bar.name.compare( barName ) == 0;
}) != std::end( bars ) );
}
std::string name;
std::vector<Bar> bars;
};
int main( )
{
Foo foo{ "North America" };
foo.AddBar( { "New York" } );
foo.AddBar( { "LA" } );
foo.AddBar( { "Toronto" } );
foo.AddBar( { "Seattle" } );
foo.AddBar( { "BC" } );
foo.AddBar( { "Winnipeg" } );
// Check if a single foo instance contains the city.
if ( foo.Contains( "Toronto" ) )
std::cout << "City: Toronto Continent: " << foo.name << '\n';
Foo foo2{ "South America" };
foo2.AddBar( { "Lima" } );
foo2.AddBar( { "Santiago" } );
foo2.AddBar( { "Salvador" } );
foo2.AddBar( { "Fortaleza" } );
foo2.AddBar( { "Quito" } );
std::vector<Foo> foos{ std::move( foo ), std::move( foo2 ) };
// Check if any foo instance contains a specific city.
const std::string cityName{ "Toronto" };
auto it{ std::find_if( std::begin( foos ), std::end( foos ),
[ &cityName ]( const Foo& foo ) { return foo.Contains( cityName ); } ) };
if ( it != std::end( foos ) )
std::cout << "Continent: " << it->name << '\n';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.