使用给定参数构造一个具有默认参数的类

问题描述 投票:0回答:1

示例我有一些随机类,其构造函数有一些默认参数。我有一个函数可以使用一些给定的参数构造该类,并且我需要以某种方式检查我是否可以使用这些给定的参数构造该类

class someRandomClass
{
public:
    someRandomClass(int a = 0, float b = 0.f, double c = 0.0, const char* d = "") {}
    // any argument you can think of
};

template<typename Cls, typename... Ts>
void constructClass(Ts... args) {
    // something to check
    if (constructable(Cls, Ts...))
        Cls myClass(args...);
}

有什么方法可以实现这一点吗?

c++ parameters arguments c++17
1个回答
2
投票

std::is_constructible
特质可能会有所帮助(而且你可能会摆脱
fake_constructor
:-)):

template<typename Cls, typename... Ts>
// requires(std::is_constructible_v<Cls, Ts&&...>) // C++20,
                                                  // or SFINAE for previous version
void callClassConstructor(Ts&&... args)
{
    if constexpr (std::is_constructible_v<Cls, Ts&&...>)
    {
        Cls myClass(std::foward<Ts>(args)...);
        // ....
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.