如下代码:

template<typename T, MyEnum K> __global__ void myKernel(const T a[]);
template<typename T> __global__ void myKernel<T,SomeValueOfMyEnum>(const T a[]) {
    // implementation
}

触发以下错误消息:



为什么?

笔记:
  • 我很确定这与CUDA不相关,只是一个C++问题。
  • 关于局部特化,有很多问题,但我不知道我是否是其中任何一个的重复。
  • 最佳答案

    您不能对模板函数进行部分特化,因为C++并未定义此类事物。您只可以对类模板进行部分特化处理[§14.5.5/temp.class.spec]

    类局部特化-有点丑陋,但也许对您有帮助。

    enum MyEnum
    {
        E1, E2
    };
    
    template<typename T, MyEnum K>
    struct MyKernel
    {
        void operator()(const T a[])
        {
            // ...
        }
    };
    
    template<typename T>
    struct MyKernel<T, E1>
    {
        void operator()(const T a[])
        {
            // ...
        }
    };
    
    int main()
    {
        MyKernel<int, E1>()( ... ); // <--- To call
    }
    

    关于c++ - 双模板函数实例化失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19959637/

    10-09 06:33