Сообщение Re[2]: Вопрос про конструкторы от 08.08.2019 8:52
Изменено 08.08.2019 9:21 Videoman
Re[2]: Вопрос про конструкторы
Даже вот такое чудо работает, но очень нужно мнение, насколько это правильно ???:
#include <string>
#include <vector>
#include <iostream>
template <typename Type>
struct Stub
{
Stub(Type type) : type(type) {}
operator const Type&() const { return type; };
Type type;
};
struct A
{
operator const size_t& () const { return Stub<size_t>({}); }
operator const std::vector<std::string>& () const { return Stub<std::vector<std::string>>({}); }
};
struct B
{
B(const A& a) : v(a) {}
std::vector<std::string> v;
};
int main()
{
// Где-то ниже
A a;
std::vector<std::string> v1 = a; // (1)
std::vector<std::string> v2(a); // (2)
v1 = a; // (3)
B b(a);
}
Re[2]: Вопрос про конструкторы
Даже вот такое чудо работает, но очень нужно мнение, насколько это правильно ???:
P.S. Глянул ассемблерный листинг внимательно. Вроде не работает как нужно. Деструктор Stub вызывается перед выходом, до return .
#include <string>
#include <vector>
#include <iostream>
template <typename Type>
struct Stub
{
Stub(Type type) : type(type) {}
operator const Type&() const { return type; };
Type type;
};
struct A
{
operator const size_t& () const { return Stub<size_t>({}); }
operator const std::vector<std::string>& () const { return Stub<std::vector<std::string>>({}); }
};
struct B
{
B(const A& a) : v(a) {}
std::vector<std::string> v;
};
int main()
{
// Где-то ниже
A a;
std::vector<std::string> v1 = a; // (1)
std::vector<std::string> v2(a); // (2)
v1 = a; // (3)
B b(a);
}
P.S. Глянул ассемблерный листинг внимательно. Вроде не работает как нужно. Деструктор Stub вызывается перед выходом, до return .