Здравствуйте, Went, Вы писали:
W>Есть тип Variant. Может хранить объект любого типа, хоть ссылку, хоть указатель, хоть сам объект. Хотелось бы такого:
W>W>int x;
W>int& rx = x;
W>Variant v;
W>v.set(x); // v хранит сам объект
W>v.set(rx); // v должен хранить ссылку на объект (внутри реализовано через указатель, но это детали), но он не отличает это от верхней строчки
W>
W>Если я пишу явно
W>W>v.set<int&>(rx);
W>
W>то все работает как надо.
W>Я не уверен, что мне обязательно нужно без явного указания. Но хочется все-таки такую возможность иметь.
decltype(x) и decltype(rx) будут разными типами, int и int&, соответственно. Можно этим воспользоваться, обернув всё в макрос, чтобы избежать повтора.
Как-то так:
#define VARIANT_SET(v, x) v.set<decltype(x)>(x)
Но вообще я не стал бы так делать