如果编译器支持C++ 20,那么你可以编写
#include <type_traits>
template <typename T, uint16_t dimension>
class Vector
{
public:
template <typename... Ts>
Vector( Ts &&... args ) requires ( sizeof...( args ) == dimension ) && std::conjunction_v<std::is_same<T, std::decay_t<Ts>>...>
{
}
};
//...
Vector<float, 5> v( 1.1f, 2.2f, 3.3f, 4.4f, 5.5f );
或者作为
@HolyBlackCat
写在评论中,你也可以写
template <typename T, uint16_t dimension>
class Vector
{
public:
template <typename... Ts>
Vector( std::same_as<T> auto ...args ) requires( sizeof...( args ) == dimension )
{
}
};