小编GiC*_*iCo的帖子

检查(原始)类型是否可以在C++中转换

是否可以检查(在C++中)类型是否可转换(隐式或显式)?是否存在某些内容std或是否可以编写类似C#(C#同一问题)的函数?

我想对类型执行此检查而不是类型的实例.

我不确定C++中的类型系统.有没有类似TypeC#或Java 的类?typeid(int)是我找到的最近的.我可以将类型存储到变量中吗?更贴心的阅读提示将不胜感激.

例如:

bool isCastable(false);
bool withoutLoss(true);
isCastable = isCastableFromTo(typeid(int), typeid(__int64), withoutLoss); //true
isCastable = isCastableFromTo(typeid(int), typeid(short), withoutLoss); //false
isCastable = isCastableFromTo(typeid(int), typeid(double), withoutLoss); //true
isCastable = isCastableFromTo(typeid(double), typeid(int), withoutLoss); //false
isCastable = isCastableFromTo(typeid(string), typeid(int), withoutLoss); //false

withoutLoss = false;
isCastable = isCastableFromTo(typeid(int), typeid(__int64), withoutLoss); //true
isCastable = isCastableFromTo(typeid(int), typeid(short), withoutLoss); //true
isCastable = isCastableFromTo(typeid(int), typeid(double), withoutLoss); //true
isCastable = isCastableFromTo(typeid(double), typeid(int), withoutLoss); //true
isCastable = …
Run Code Online (Sandbox Code Playgroud)

c++ casting c++03

10
推荐指数
2
解决办法
2555
查看次数

c ++中的动态多态和函数重载

带有多态对象的函数重载是否适用于C++.我希望实现类似于下面的代码的行为.

编辑:我希望setInput为每个派生类提供不同的功能.这task.setInput(derived2)要求setInput(BaseClass* object),它摧毁了我.允许小姐使用api.所以我认为我必须在方法中切换功能.我想使用dynamic_cast会这样做吗?多谢.:-)

class BaseClass { virtual void xy() .. }
class Derived1Class : BaseClass { .. } 
class Derived2Class : BaseClass { .. } 
class Derived3Class : Derived2Class { .. } 

class Task {
    void setInput(BaseClass* object);
    void setInput(Derived1Class* object);
    void setInput(Derived2Class* object);
    void setInput(Derived3Class* object);
}

main() {
   BaseClass* base = new BaseClass();
   Derived1Class* derived1 = new Derived1Class();
   BaseClass* derived2 = new Derived2Class();
   Derived2Class* derived3 = new Derived3Class();
   Task* task =  new …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism

1
推荐指数
1
解决办法
413
查看次数

标签 统计

c++ ×2

c++03 ×1

casting ×1

polymorphism ×1