Вы можете написать конструктор шаблона с пакетом параметров для TpC
.(Как и предполагалось в комментариях, я использовал SFINAE для ограничения шаблона, в противном случае он мог бы быть лучше, чем конструктор копирования. См. Весь фрагмент кода по ссылке, которую я разместил.)
template <typename T, typename... U>
struct my_is_same {
constexpr static bool value = false;
};
template <typename T1, typename T2, typename... U>
struct my_is_same<T1, T2, U...> {
constexpr static bool value = std::is_same_v<T1, std::remove_cvref_t<T2>>;
};
template <typename T, typename... U>
inline constexpr bool my_is_same_v = my_is_same<T, U...>::value;
template <typename T>
class TpC {
T t;
public:
template <typename... Args, typename = std::enable_if_t<
!my_is_same_v<TpC, Args...> &&
std::is_constructible_v<T, Args&&...>
>>
TpC(Args&& ... args) : t(std::forward<Args>(args)...) {}
};
изатем
int x;
double y;
std::vector<bool> z;
TpC<A> obj_a (x, y);
TpC<B> obj_b (z);
LIVE