xyxykingyo 2023-04-10 01:26 采纳率: 20%
浏览 26

C++泛型程序设计:如何获得真实的类型

大家好
想问大家,如果我有这样的伪代码:

// 基类
classA {
}

template <typename T>
derived classB: A {
}

template <typename T>
derived classD: A {
}

class C {
public:
   auto create_members() ->int {}
   auto get_member(int id) -> *A {}
   auto do_something(int id1,int id2)-> void{}
private:
  std::vector<std::unique_ptr<classA>> members;
}

已知在main function里面,我们定义了:
auto b = new classB();
auto c = new classD<std::tuple<int, double>>();

然后,比如在这个classC::do_something的函数中,
A* a1 = get_number(id1)
A* a2 = get_number(id2)
我的问题是:有没有什么办法能知道在main function中定义的b的type是什么?比如auto b = new classB(),我想在classC中得到这个type是int。。然后c的type是std::tuple<int, double>...然后再比较b的type是否存在与c这个tuple的type里面。。。
因为在classC中不会知道用户在主函数中定义了什么classB<>,它可以是classB,classB或者classB<std::tuple<int, double>>,我真的很懵逼
谢谢大家

  • 写回答

2条回答 默认 最新

  • 於黾 2023-04-10 08:06
    关注

    你如果需要到class C里去判断到底是什么类型,那你用继承和泛型就完全是多此一举了
    到头来还是要写一堆if,else
    你在设计这个类的时候就要考虑到不管它是个什么类型,操作都应该是一致的
    如果两个类之间的操作没有一致性,那么它就不应该继承同一个基类,没意义

    评论

报告相同问题?

问题事件

  • 修改了问题 4月10日
  • 修改了问题 4月10日
  • 修改了问题 4月10日
  • 修改了问题 4月10日
  • 展开全部

悬赏问题

  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红
  • ¥15 想问问富文本拿到的html怎么转成docx的
  • ¥15 我看了您的文章,遇到了个问题。
  • ¥15 GitHubssh虚拟机连接不上
  • ¥15 装完kali之后下载Google输入法 重启电脑后出现以下状况 且退不出去 桌面消失 反复重启没用