我希望我的函数接受压缩级别(可以取值0..9)。 我希望用户能够手动设置级别compression(7)
或使用一些默认值,如compression::high
,compression::medium
。
我想到了以下几点:
class Compression {
public:
Compression(size_t level) : m_level(level) {};
static const Compression Medium;
static const Compression High;
size_t get() const { return m_level; };
private:
size_t m_level;
};
const Compression Compression::High{9};
const Compression Compression::Medium{5};
问题是我正在开发一个只有头的库,而这样做导致了“'Compression::High'和'Compression::Medium'的多个定义”。 这个怎么解决?
编辑
挑战:
压缩
选项的函数重载foo(压缩)
(foo(size_t)
已用于其他内容)。
GCC版本9.3.0接受代码(C++17):
inline const Compression Compression::High{9};
inline const Compression Compression::Medium{5};
请注意内联
字。
不是最好的,但作为最后的手段,您可以使用返回所需实例的静态函数:
class Compression {
public:
Compression(size_t level) : m_level(level) {};
static Compression Medium() { return 3; }
static Compression High() { return 5;}
size_t get() const { return m_level; };
private:
size_t m_level;
};
使用它需要额外的()
:
foo( Compression::High() );
PS:如果您想区分size_t
和compression
,我建议使构造函数显式,以避免潜在的混淆。 可能出错的一件事是您忘记提供一个条(size_t)
重载,并且如下所示:
size_t x = 3;
bar(x);
将意外地以静默方式调用条(压缩)
重载。