我正在尝试制作一个模板函数(在这种情况下,在一个类中作为静态方法),我似乎无法调用我创建的模板规范。换句话说,我希望代码调用我制作的模板规范,但它没有。
class Atomic {
public:
template <typename T>
static T testAndSet(volatile T &t, T value)
{
ASSERT(false, "Unsupported type");
return T();
};
template <long>
static long testAndSet(volatile long &t, long value )
{
#if defined(_PC)
return InterlockedExchange(&t, value);
#else
return __sync_lock_test_and_set(&t, value);
#endif
};
};
调用代码:
volatile long counter = 0;
long newValue = 4;
Atomic::testAndSet( counter, newValue);
调用堆栈显示:
sample.exe!Atomic::testAndSet(volatile long & t=0, long value=4)
我也尝试过这种方式,但没有奏效。
template <typename T, typename TT>
static TT testAndSet(T &t, TT value) { ... }
template <volatile long, long>
static long testAndSet(volatile long &t, long value ) { ... }
或者
template <typename T, typename TT>
static TT testAndSet(T t, TT value) { ... }
template <volatile long &, long>
static long testAndSet(volatile long &t, long value ) { ... }
同样的事情......所以现在我必须尝试了解正在发生的事情,或者强行进入它。在那之前,我会看 Lavavej 的核心 c++ 视频.. =)