2015-09-01 1 views
1

Я пишу ядра cuda, которые могут использовать функторы, которые передаются как параметр с шаблонами. Например:Есть ли способ избежать необходимости создавать множество шаблонов во множестве файлов?

template<typename Functor> void myKernel(float arg1, float* arg2, Functor f) { 
    // Do stuff that will involve f 
} 

Эти функторов определены в заголовочном файле, который я включать в каждый файл CPP, и для каждого из них я должен создать экземпляр все ядра со всеми функторов:

template<> myKernel<Add>(float, float*, Add) 
template<> myKernel<Sub>(float, float*, Sub) 

Это это много дублирования кода, и мы должны помнить о добавлении новой строки для каждого нового функтора. Есть ли способ определить все это один раз?

+0

Препроцессора макросы? – Amit

+0

Вам известно о явной инстанцировании? https://msdn.microsoft.com/en-us/library/by56e477.aspx –

+0

Надеюсь, что есть решение, которое не связано с marcros. – Pafnouti

ответ

0

Просто добавьте instanciations в файл заголовка, и вам не нужно будет указывать их каждый раз.

1

Посмотрите на extern template declarations.

Есть некоторые тонкие детали о Экстерных шаблонах, особенно 14.7.2.10:

для встроенных функций и специализации шаблона класса За исключением, явных деклараций конкретизации имеют эффект подавляя неявное создание объекта, к которому они относятся.

Это означает, что следующий будет только подавить создание экземпляра без встроенного члена функции F в других единицах трансляции, но не для г:

template<typename T> class A { 
public: 
    void g() {} // inline member function 
    void f(); 
}; 

template<typename T> void A::f() {} // non-inline 

 Смежные вопросы

  • Нет связанных вопросов^_^