手动选择不明确的构造函数



当对函数(成员类函数或自由函数(的调用不明确时,我们可以使用static_cast<>轻松地选择我们调用的函数类型:

struct S {
void f(uint32_t, uint8_t) {
std::cout << "1n";
}
void f(uint32_t, uint32_t) {
std::cout << "2n";
}
};
int main() {
S s;
auto f1 = static_cast<void(S::*)(uint32_t, uint8_t)>(&S::f);
(s.*f1)(1,1);
auto f2 = static_cast<void(S::*)(uint32_t, uint32_t)>(&S::f);
(s.*f2)(1,1);
}

但我想知道是否有可能为构造函数做一些类似的事情。例如,在以下结构中:

struct S {
S(uint32_t, uint8_t) {
std::cout << "1n";
}
S(uint32_t, uint32_t) {
std::cout << "2n";
}
};

是否可以手动解决创建S s(1,1);时不明确的构造函数调用?

这就是你的想法吗?

S s1(static_cast<uint32_t>(1), static_cast<uint32_t>(2));
S s2(static_cast<uint32_t>(1), static_cast<uint8_t>(2));

这通过在参数中显式指定类型来消除构造函数调用的歧义。

为什么不直接转换为正确的类型?CCD_ 3是CCD_;混淆";当传递到无符号参数时

int main() {
S s;
s.f(1, (uint8_t)1);
s.f(1, (uint32_t)1);
s.f(1, 1U);
}

戈德堡演示

最新更新