gpt4 book ai didi

c++ - C++上的部分类定义?

转载 作者:IT老高 更新时间:2023-10-28 12:35:06 24 4
gpt4 key购买 nike

任何人都知道是否可以在 C++ 上定义部分类?

类似:

file1.h:

  class Test {    public:        int test1();};

文件2.h:

class Test {    public:        int test2();};

对我来说,定义多平台类似乎非常有用,这些类在它们之间具有独立于平台的通用功能,因为继承是一种对多平台类没有用处的成本。

我的意思是你永远不会在运行时有两个多平台特化实例,只有在编译时。继承可能有助于满足您的公共(public)接口(interface)需求,但之后它不会在运行时添加任何有用的东西,只会增加成本。

此外,您将不得不使用丑陋的#ifdef 来使用该类,因为您无法从抽象类创建实例:

class genericTest {    public:        int genericMethod();};

那么让我们说win32:

class win32Test: public genericTest {    public:        int win32Method();};

也许:

class macTest: public genericTest {    public:        int macMethod();};

假设 win32Method() 和 macMethod() 都调用 genericMethod(),你将不得不像这样使用类:

 #ifdef _WIN32 genericTest *test = new win32Test(); #elif MAC genericTest *test = new macTest(); #endif test->genericMethod();

现在想了一会儿,继承只对给他们一个 genericMethod() 是有用的,它依赖于特定于平台的方法,但是你有调用两个构造函数的代价。此外,您的代码周围散布着丑陋的#ifdef。

这就是我寻找部分类(class)的原因。我可以在编译时定义特定平台相关的部分结束,当然,在这个愚蠢的例子中,我仍然需要在 genericMethod() 中使用丑陋的#ifdef,但还有另一种方法可以避免这种情况。

最佳答案

这在 C++ 中是不可能的,它会给你一个关于重新定义已经定义的类的错误。如果您想共享行为,请考虑继承。

关于c++ - C++上的部分类定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/140935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com