2015-04-19 2 views
1

У меня есть функция op, и я бы хотел специализироваться на всех случаях, где параметр шаблона PROCESSOR::DIMENSION = 2. Возможно ли это вообще или как я могу достичь чего-то подобного?Специализированный шаблон функции по статическому значению в классе параметра шаблона

// How to specialize this for all PROCESSOR with DIMENSION = 2? 
template <class PROCESSOR> 
void op(Node<PROCESSOR>& node){ 

} 


// this is an example for template parameter PROCESSOR 
template <int DIM> 
class CPU 
{ 
    public: 
     static int DIMENSION = DIM; 

}; 

(Если вы подозреваете XY вопрос, вы можете быть правы. У меня есть довольно сложная задача проектирования здесь, и я оценить различные идеи, как это сделать. Один из них приводит к вышеупомянутому X. В частности, я стараюсь избегать полиморфных указателей, поскольку они не позволят компилятору встраиваться, и мы говорим о очень маленьких фрагментах кода для высокопроизводительного приложения.)

+0

Является ли ПРОЦЕССОР и ЦП одинаковым? если это так, пожалуйста, исправьте свой вопрос! – Klaus

+0

ЦП может использоваться как параметр шаблона PROCESSOR, например: 'op > (n)'. – Michael

+0

Не волнуйся, похоже, разумный вопрос. –

ответ

6

Нравится это. Обратите внимание, что вы не можете частично специализировать функции:

template <class PROCESSOR, int D = PROCESSOR::DIM> 
struct op 
{ 
    void operator()(...); 
}; 

template <class PROCESSOR> 
struct op<PROCESSOR, 2> 
{ 
    void operator()(...); 
}; 
Смежные вопросы