防止某人意外地做某事
Keep somebody from doing something by accident
>我遇到的问题基本上可以用下面的代码来解释:
void (*fn_ptr)();
template<typename T> void Second(){
//do something
}
template<typename T> void First() {
//do init
fn_ptr = Second<T>;
}
函数First
和函数Second
都需要template function
,并且只能通过函数指针fn_ptr
调用。在调用函数 Second
之前,必须调用一次函数 First
。您不需要手动调用函数 Second。因此,在某处使用fun_ptr
之前,我们唯一应该做的是:
fn_ptr = First<SomeType>;
问题来了:我怎样才能阻止人们这样做:
fn_ptr = Second<SomeType>;
ps:我知道当函数First
和函数Second
不template function
时该怎么做
在不详细介绍的情况下,我将使用类和fn_ptr = ...将成为一种功能。然后在函数中,您可以测试fn_ptr是否仍然是 NULL,那么 rhs 必须是可动态铸造到第一个类的。
我不太确定您可以做很多事情来防止错误。
最后我设法让它工作。只需将这两个函数设置为类模板的静态成员函数:
template<typename T> class Foo{
public:
void First() {
//do init
fn_ptr = Second<T>;
}
private:
void Second(){
//do something
}
};
然后:
fn_ptr = Foo<SomeType>::First; // OK
fn_ptr = Foo<SomeType>::Second; // Error: Second is inaccessable
我想说的只是冬青狗屎。 fn_ptr
函数First
为其分配私有静态成员函数之后运行良好。嗯,它适用于VC++ 2012。我不知道它是否符合ISO标准,但我想它是便携式的。
相关文章:
- 在C++中对T*类型执行std::move的意外行为
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 处理除以零会导致<csignal>意外行为
- vscode下的Arduino代码出现意外编译错误
- 使用++运算符会导致意外的结果
- 套接字读取后,我在缓冲区中看到意外输入
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 使用vscode调试时,GDB意外退出
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 尝试将字符串/字符转换为整数会产生意外结果
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- C++标头错误 C2238 意外标记";"
- C++中意外的多头值
- vector.size() 在比较中意外工作
- 使用 malloc() 时出现意外大小
- 多线程程序中出现意外的内存泄漏
- 为什么static_cast基础类型的枚举类int8_t获得意外值?
- 字符串比较中的意外输出
- 我的代码中的意外价值以及我如何修复它
- 防止某人意外地做某事