我正在尝试创建具有惰性计算的类。所以我需要结构来保存以前计算的变量,我想将该类放入未命名的命名空间(不想污染全局范围)。这是解释我想要什么的最小代码:
计算器.h
:
#ifndef CALCULATOR_H
#define CALCULATOR_H
class PrevCalc;
class Calculator
{
public:
Calculator();
PrevCalc* prevCalc;
};
#endif // CALCULATOR_H
计算器.cpp
:
#include "calculator.h"
namespace{
struct PrevCalc{
double prevA = -1;
double prevB = -1;
double prevC = -1;
};
}
Calculator::Calculator()
{
prevCalc = new PrevCalc();
}
当然它会给出一个错误 expected type-specifier before 'PrevCalc'
并且如果我定义 PrevCalc
没有命名空间一切正常。我的问题是如何声明将在 .cpp
文件中未命名的命名空间中定义的类
最佳答案
My question is how to declare class which will be defined in unnamed namespace in
.cpp
file
你不能。未命名的命名空间明确意味着对于它出现在其中的当前翻译单元是私有(private)可见的,并且本身不能用于前向声明。
使用 pimpl idiom 可能会更好, 如果您想隐藏实现细节。
另一种流行的方法是使用 internal_
命名空间,并记录它不适合 public
使用:
namespace calculators {
namespace internal_ {
struct PrevCalc{
double prevA = -1;
double prevB = -1;
double prevC = -1;
};
}
class Calculator {
public:
Calculator();
private: // !!!!
internal_::PrevCalc* prevCalc;
};
}
关于c++ - 如何转发声明在未命名命名空间中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33267839/