在我尝试开发一个线程安全的C++弱指针模板类时,我需要检查一个指示对象仍处于活动状态的标志,如果是,则增加对象的引用计数,我需要以原子方式执行这两个步骤.
我知道编译器提供的内在函数的存在,例如_InterlockedCompareExchange()和_InterlockedIncrement().但我想要的是一个interlockedCompareIncrement()函数,有没有一种有效的方法来使用其他原语来模拟这个内在函数,至少在Windows x86平台上?
可能重复:
在C++中选择重载模板函数时的优先级
模板化功能使我可以方便地操作各种类型:
template<typename T> void destroy(T* obj) {
delete obj;
}
Run Code Online (Sandbox Code Playgroud)
但是在某些时候我想对类层次结构做一些专门化:
class Base { virtual void doSomething(); };
class Derived : public Base {};
void destroy(Base* obj) {
obj->doSomething();
delete obj;
}
Run Code Online (Sandbox Code Playgroud)
如果我传递确切类型Base*,则调用了预期的专用函数,但是重载决策的规则似乎更喜欢通用的模板化版本而不是执行静态向上转换,如果我传递Derived*给void detroy().
当然,我可以为所有可能的派生类型创建所有重载函数,但它的可维护性较差.
我正在使用Visual C++ 2008,有什么方法可以解决上述问题吗?