我目前正在致力于实现一个模块,该模块由三个函数组成,包括Init()、Process()和Release()。我想找到一种在使用std::vector::push_backinProcess()和Release()函数时抛出编译错误的方法。有什么可行的办法吗?谢谢大家!
class AModule {
private:
std::vector<std::int32_t> vector_list;
public:
bool Init() override {
vector_list.push_back(10); // Allow to use push_back function only in Init state
}
void Process() override {
vector_list.push_back(10); // Should throw compile error here
}
void Release() override {
vector_list.push_back(10); // Should throw compile error here
}
};
Run Code Online (Sandbox Code Playgroud)
我尝试static_assert通过包装向量类来使用,但它无法正常工作。
如果您正在使用,GCC则可以poison在之后使用预处理器来处理某些标记pragma(请参阅此处)。如果您正在使用MSVC,那么您deprecated pragma至少可以使用 来获得警告(您可以通过提供正确的标志将其转变为编译错误)。
// Header file
#include <cstdint>
#include <vector>
class AModule {
private:
std::vector<std::int32_t> vector_list;
public:
bool Init();
void Process();
void Release();
};
// Source file
bool AModule::Init() {
vector_list.push_back(10); // Allow to use push_back function only in Init state
return true;
}
// If GCC (and probably clang)
#pragma GCC poison push_back // Please do not use this in a header file
// If MSVC
#pragma deprecated(push_back)
void AModule::Process() {
// vector_list.push_back(10); // compile error here
}
void AModule::Release() {
// vector_list.push_back(10); // compile error here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |