GCC не будет компилировать следующий фрагмент кода (который на самом деле является правильным поведением GCC, поскольку он соответствует стандарту C ++, как я уже узнал. VC ++, однако, будет компилироваться.)
template<class T>
void CUDAMemory1D2DTextureAllocator<T>::allocateMemoryOnDevice()
{
m_pChannelDesc = cudaCreateChannelDesc<T>();
...
}
Как я уже выяснил при поиске, нужно сказать компилятору, что cudaCreateChannelDesc
- это шаблонный метод. В противном случае он будет пытаться
разобрать <
как оператор меньше ...
Следующий фрагмент показывает это в простом примере:
template< typename G >
struct Test
{
template< typename T > T f() const;
};
template< typename G, typename T >
void g()
{
Test< G > t;
t.f< T >(); // ERROR: gcc won't compile that
t.template f< T >(); // OK: now gcc knows that f is a template method an treads the following angle brackets not as operators but as template brackets...
}
Пока все хорошо. Теперь мой вопрос: как это сделать в приведенном выше случае, когда метод, который я вызываю, является cudaCreateChannelDesc
, который не принадлежит ни одному классу или пространству имен?
Любые советы или предложения, как решить эту ситуацию, очень приветствуются.
Спасибо