我有函数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。特别是,我尝试避免多态指针,因为它们会阻止编译器内联,我们正在讨论高性能应用程序的非常小的代码段。)

最佳答案

像这样。请注意,您不能部分专门化功能:

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

template <class PROCESSOR>
struct op<PROCESSOR, 2>
{
  void operator()(...);
};

关于c++ - 通过模板参数类中的静态值来专门化功能模板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29731783/

10-10 22:31