mercredi 16 août 2017

C++11 forwarding Template template parameter does not work

I used template template parameter as follows:

    /* [1]: Definition containing a template template parameter */
          template <typename T, template<class> class Kernel>
          void transform(Kernel<T> kernel, T * pSrc, int elementCount) {
               //....
          }

    /* [2]: Definition of a helper struct */
          template <typename T> struct Kernel1 {    
               //...
          };

    /* [3]: Use the previous definitions */
          float arr1[5] = {1,2,3,4,5};

          //The following two calls to ForEach do successfully compile
          ForEach(KernelStd<float>(), arr1, 5); //USE1
          ForEach<float>(KernelStd<float>(), arr1, 5); //USE2

    /* [4]: Definition of a helper function */      
          template <typename F, typename ...Args>
          void forwarder(F func1, Args && ...args) {
                //...
                func1(std::forward<Args>(args)...);
          }
          //But the following callS do not compile.
          forwarder(ForEach, KernelStd<float>(), arr1, 5); //USE3
          forwarder(ForEach<float>, KernelStd<float>(), arr1, 5); //USE4 

I am using VS2013 update 5 and I get the following error:

         error C2783: 'void ForEach(Kernel<T>,T *,int)' : could not deduce 
         template argument for 'Kernel'

Any help will be appreciated.

Aucun commentaire:

Enregistrer un commentaire