Срабатывает конструктор для initializer_list, а надо для int
У меня есть класс, содержащий в том числе 2 конструктора:
#include <initializer_list>
#include <iostream>
struct A {
A(int) { std::cout << "1"; }
A(std::initializer_list<int>) { std::cout << "2"; }
};
int main() {
A a1{1};
A a2{1, 2};
}
Как сделать так, чтобы оба конструктора поддерживались, но объявление a1 вызывало первый конструктор, а a2 — второй?
Объявления должны остаться такими же простыми, а вот конструкторы можно менять.
Ответы (2 шт):
Автор решения: AR Hovsepyan
→ Ссылка
Если бы знать зачем вам это... Вместо std::initializer_list можно передать какую то другую последовательность(например std::vector), а можно, например, так:
A(std::initializer_list<int> a)
{
if (a.size() == 1)
A(*a.begin());
else
std::cout << "2";
}