C++ 如果基类已知,如何确定类型可转换为哪个派生类?

C++ 如果基类已知,如何确定类型可转换为哪个派生类?,c++,C++,考虑以下代码: struct A {}; struct B : A{}; struct X { operator B() {return {};} }; int main() { A a = X{}; } aa=X{}确实起作用,并导致调用X::operator B 如果我只知道X和A,是否可以在编译时确定类型B 换句话说,是否有可能编写一个类型traitfoo\u t,从而foo\u t=B?在我的第一条评论中,我误解了trait需求。我一直在想一种方法来做到这一

考虑以下代码:

struct A {};
struct B : A{};

struct X
{    
    operator B() {return {};}
};

int main()
{
    A a = X{};
}
aa=X{}
确实起作用,并导致调用
X::operator B

如果我只知道
X
A
,是否可以在编译时确定类型
B


换句话说,是否有可能编写一个类型trait
foo\u t
,从而
foo\u t
=
B

在我的第一条评论中,我误解了trait需求。我一直在想一种方法来做到这一点,但也有一个问题,即可能存在某种类型的
C
,这样您就可以合理地拥有
foo\u t=C
。即使没有,我认为这个问题是无法用模板系统解决的。@CruzJean我也开始认为这是不可能的。关于歧义问题:如果代码< >代码> >不可转换为<代码> > <代码>,我不希望这个特性起作用。我想我们可以用<代码> STD::iSyApabsive或,但是那些不能找到中间使用的第三种类型(如B在这里)。这是一个逻辑编程问题,C++不支持