#include
struct B {
bool operator==(B const&) const {
return true;
}
};
struct C {
bool operator==(C const&) const {
return true;
}
};
struct A1 : B, C {};
struct A2 : B, std::array {};
int main() {
{
auto a = A1{};
auto b = A1{};
auto _ = a == b; // expected error: Member 'operator=='
// found in multiple base classes of different types
}
{
auto a = A2{};
auto b = A2{};
auto _ = a == b; // no error, why?
}
}
Почему в таком случае нет ошибки неоднозначности перегрузки для std::array::operator== ?< /п>
int main() { { auto a = A1{}; auto b = A1{}; auto _ = a == b; // expected error: Member 'operator==' // found in multiple base classes of different types } { auto a = A2{}; auto b = A2{}; auto _ = a == b; // no error, why? } } [/code] [b]Почему в таком случае нет ошибки неоднозначности перегрузки для[/b] std::array::operator== [b]?[/b]< /п>
В настоящее время я пытаюсь создать очень простую систему Entity Component.
Для этого я определил следующие классы:
class Component
{
public:
virtual ~Component() {}; // Ensure polymorphic behavior with a virtual destructor
};
std::array::operator[] всегда возвращает ссылку на lvalue ( const если необходимо), но какой может быть смысл в использовании такой строки кода, которая допустима для C++?
std::array{1} = 3;
В конце концов, std::get немного более строгий, потому...