c ++通用指针?空指针?

Posted

技术标签:

【中文标题】c ++通用指针?空指针?【英文标题】:c++ generic pointer? void pointer? 【发布时间】:2011-09-27 03:00:22 【问题描述】:

我正在编写一个程序,它可以在构造函数中接受 3 个整数或 3 个浮点数(我想我需要 2 个构造函数)。我想声明一个数组并将值存储在数组“数字”中。

如果我不知道将调用哪个构造函数,我不确定如何声明“数字”(作为 int 数组或作为 float 数组)。

有解决这个问题的好方法吗?或者我可以创建一个 int 数组和一个 float 数组,并以某种方式拥有一个指向正在使用的数组的通用指针(使用 void 指针是最好的方法吗)?

【问题讨论】:

如果模板建议对您不起作用,那么您可能需要重新评估您的设计。例如,double 可以精确地保存大量的整数值;你真的需要区分这两种情况吗? 这个类是做什么的?创建对象后,用户会关心它使用的是哪种类型吗? - 例如,如果这是一个矢量类,您可以将其设为常规类型,并可能提供不同实例化之间的转换。 【参考方案1】:

看起来你想要一个模板类。

template <class T>
class Foo

public:
    Foo(T a, T b, T c)
    
        numbers[0] = a;
        numbers[1] = b;
        numbers[2] = c;
    
private:
    T numbers[3];
;

【讨论】:

我想你还是可以解释一下,你如何在运行时确定使用哪个实例化。 @UncleBens 好吧,这显然取决于问题域......你想要一个带有ints,使用Foo&lt;int&gt;,你想要一个带有'double's,使用Foo&lt;double&gt;,等等。 我的意思是:这里的决定是在编译时做出的。提问者留下的印象是他想在运行时做出决定。 - 当然,不知道他在问什么似乎几乎不可能回答。 @UncleBens 啊,我明白了。这真的取决于这需要什么。你可以从一些 FooBase 派生这个模板类,但我真的看不出基类中可能存在什么功能,因为 Foo 只包含基于模板的东西。基本上,是的 - 需要更多信息! 你能告诉我为什么这只在构造函数代码内联时才有效吗?我可以不把它定义在.cpp文件中吗?【参考方案2】:

你不能为此使用模板吗?

示例:

template <class T> 
class Foo 
    public Foo(T a, T b, T c);
;
//
Foo<float> aaa(1.0f, 1.0f, 0.5f);
Foo<int> bbb(1, 2, 3);

【讨论】:

在运行时你会如何选择使用哪一个?【参考方案3】:

为什么不做

class Foo 
public:
    Foo(double a, double b, double c)
        :_a(a), _b(b), _c(c)
    

    virtual double get_a() return _a;
    virtual double get_b() return _b;
    virtual double get_c() return _c;
    // more methods

protected:
    double _a, _b, _c;
;

适用于整数和浮点数:

Foo ifoo(1, 3, 5);
Foo ffoo(2.0, 4.0, 6.0);

以及混合它们:

Foo mfoo(1, 4.0, 5);

douable 存储空间对于 intfloat

来说都绰绰有余

【讨论】:

以上是关于c ++通用指针?空指针?的主要内容,如果未能解决你的问题,请参考以下文章

C - 为什么指针常常初始化为 NULL?

C - 为什么指针常常初始化为 NULL?

以整数为键并映射到 void 指针的 C 映射/哈希表

有继承时spring注入空指针问题

dubbo分布式框架下web层调用业务层一直报空指针异常的解决办法

指针初始化为NULL的作用