首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在其内部创建类的静态实例的正确方法

在其内部创建类的静态实例的正确方法
EN

Stack Overflow用户
提问于 2015-11-05 01:49:15
回答 1查看 706关注 0票数 1

我有像素结构。我想要去除静态常数在它里面的颜色,如黑色和白色。我正在将所有内容写入一个头文件中,该文件将包含在多个cpp文件中。

代码语言:javascript
复制
struct Pixel
{
    typedef uint16_t quantum_t; 
    static const quantum_t MAX_QUANTUM = 0xffffL;
    static const quantum_t MIN_QUANTUM = 0;
    static const int QUANTUM_BITS = 16;

    quantum_t r, g, b;

    Pixel(quantum_t r_ = 0, quantum_t g_ = 0, quantum_t b_ = 0) :
        r(r_), g(g_), b(b_) { }

    template<typename T>
    static T clamp(T x)
    {
        return x > MAX_QUANTUM ? MAX_QUANTUM : (x < MIN_QUANTUM ? MIN_QUANTUM : x);
    }

    template<typename T>
    static Pixel clamp(T r, T g, T b)
    {
        return Pixel(clamp(r), clamp(g), clamp(b));
    }

    static const Pixel BLACK;
    static const Pixel WHITE;
};

const Pixel Pixel::BLACK(0, 0, 0);
const Pixel Pixel::WHITE(Pixel::MAX_QUANTUM, Pixel::MAX_QUANTUM, Pixel::MAX_QUANTUM);

最初,我试图初始化结构内部的静态黑和白,但是我从g++那里得到了一个关于类型不完整的错误。一旦我声明了结构之外的静态变量,错误就消失了,代码现在编译了。这只是一个标头库,我想知道的是,如果将这样的静态变量声明到多个cpp文件中,会导致编译问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-05 01:54:54

如果这样的静态变量包含在多个cpp文件中,它会导致编译问题吗?

不是,因为C++标准允许这种特殊的使用,除非声明为extern,否则它们不会被看到或与其他翻译单元(即cpp文件)中的相同命名变量的其他实例发生冲突。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33535321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档