将模板函数指针作为模板参数传递给模板太冗长

罗密欧
template<class T, class... TA> Uptr<T, TA> makeUniquePtr(/*...*/) { /*...*/ };
template<class T, class... TA> Sptr<T, TA> makeSharedPtr(/*...*/) { /*...*/ };

template<typename TFPType, TFPType TFP> void func(/*...*/) { /*...*/ }

template<class T, class... TA> void implementation1(/*...*/)
{
    // Can this be reduced to func<&makeUniquePtr, T, TA...>?
    func<decltype(&makeUniquePtr<T, TA...>), &makeUniquePtr<T, TA...>>(/*...*/);
}

template<class T, class... TA> void implementation2(/*...*/)
{
    // Can this be reduced to func<&makeSharedPtr, T, TA...>?
    func<decltype(&makeSharedPtr<T, TA...>), &makeSharedPtr<T, TA...>>(/*...*/);
}

呼叫func</*...*/>(/*...*/)非常冗长。有没有办法简单地打电话

func<&makeSharedPtr, T, TA...>(/*...*/)

和内部使用

&makeSharedPtr<T, TA...>

无需用户指定两次?

Yakk-亚当·内夫罗蒙特

创建一个共享的制造商无状态函数对象类,例如std::less,但template本身没有任何参数:而是operator()完美地转发到您的template函数。

传递它而不是函数指针。

如果您需要template传递给它的参数,则可以为其创建一个static方法,或者使整个template class参数都使用并在中使用它们operator()

这是一个后期绑定template参数的示例实时示例):

#include <iostream>

// test stubs:
template<typename... Ts>
using UPtr = int;
template<typename... Ts>
using SPtr = double;

template<typename T, typename...TA>
UPtr<T,TA...> makeUniquePtr() {
  std::cout << "makeUniquePtr\n";
  return {};
}
template<typename T, typename...TA>
SPtr<T,TA...> makeSharedPtr() {
  std::cout << "makeSharedPtr\n";
  return {};
}

// perfect forwarding make static functions passed by class name:
struct unique_ptr_maker {
  template<typename T, typename...TA, typename...Args>
  static UPtr<T, TA...> make(Args&&...args) {
    return makeUniquePtr<T, TA...>( std::forward<Args>(args)... );
  }
};
struct shared_ptr_maker {
  template<typename T, typename...TA, typename...Args>
  static SPtr<T, TA...> make(Args&&...args) {
    return makeSharedPtr<T, TA...>( std::forward<Args>(args)... );
  }
};

// your `func`.  It can take args or whatever:    
template<typename maker, class T, class... TA> void func() {
  std::cout << "func\n";
  maker::template make<T, TA...>();
}

// a sample of implementation 1 and 2:
template<class T, class... TA> void implementation1()
{
  func<unique_ptr_maker, T, TA...>();
}
template<class T, class... TA> void implementation2()
{
  func<shared_ptr_maker, T, TA...>();
}
// and, to test, always instantiate:
int main() {
  implementation1<int, double>();
  implementation2<int, char>();
  return 0;
}

由于您没有详细说明问题中应该执行的操作,因此许多功能都被取消。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将成员函数指针作为参数传递给模板方法

来自分类Dev

将指向成员函数参数的指针传递给模板参数

来自分类Dev

如何将函数指针作为类模板参数传递?

来自分类Dev

将函数指针作为非类型模板参数传递

来自分类Dev

将函数作为参数传递给模板返回值

来自分类Dev

如何将模板作为参数传递给函数

来自分类Dev

模板函数指针作为模板参数

来自分类Dev

将“指针指向指针”传递给模板函数

来自分类Dev

将模板类传递给模板函数

来自分类Dev

是否可以将模板的瞬时地址传递给函数,以作为指向某个函数的指针?

来自分类Dev

如何将模板内部的模板作为模板模板参数传递给另一个模板?

来自分类Dev

将参数传递给模板?

来自分类Dev

将成员函数作为参数传递给函数模板

来自分类Dev

将函数传递给模板

来自分类Dev

与将条件作为模板参数传递给sort()进行比较所产生的开销要小于将标准函数指针传递给qsort()的开销?

来自分类Dev

将nullptr传递给可变参数模板指针

来自分类Dev

使用可变参数模板将指针传递给成员

来自分类Dev

从传递给构造函数的类作为模板参数继承

来自分类Dev

将模板化函数作为参数传递给另一个函数

来自分类Dev

如何将指针传递给模板类的成员函数?

来自分类Dev

将指向模板类对象的指针正确传递给函数

来自分类Dev

可以将变量模板作为模板模板参数传递吗?

来自分类Dev

C ++将指向成员的指针作为模板参数传递

来自分类Dev

将变量的指针作为基于模板的参数传递

来自分类Dev

从CLI将URL作为参数传递给ARM模板

来自分类Dev

将模板类作为类成员函数内的模板模板参数传递

来自分类Dev

传递指针类型作为模板参数

来自分类Dev

如何将std :: get作为参数传递给模板函数?

来自分类Dev

将std :: integer_sequence作为模板参数传递给元函数

Related 相关文章

  1. 1

    将成员函数指针作为参数传递给模板方法

  2. 2

    将指向成员函数参数的指针传递给模板参数

  3. 3

    如何将函数指针作为类模板参数传递?

  4. 4

    将函数指针作为非类型模板参数传递

  5. 5

    将函数作为参数传递给模板返回值

  6. 6

    如何将模板作为参数传递给函数

  7. 7

    模板函数指针作为模板参数

  8. 8

    将“指针指向指针”传递给模板函数

  9. 9

    将模板类传递给模板函数

  10. 10

    是否可以将模板的瞬时地址传递给函数,以作为指向某个函数的指针?

  11. 11

    如何将模板内部的模板作为模板模板参数传递给另一个模板?

  12. 12

    将参数传递给模板?

  13. 13

    将成员函数作为参数传递给函数模板

  14. 14

    将函数传递给模板

  15. 15

    与将条件作为模板参数传递给sort()进行比较所产生的开销要小于将标准函数指针传递给qsort()的开销?

  16. 16

    将nullptr传递给可变参数模板指针

  17. 17

    使用可变参数模板将指针传递给成员

  18. 18

    从传递给构造函数的类作为模板参数继承

  19. 19

    将模板化函数作为参数传递给另一个函数

  20. 20

    如何将指针传递给模板类的成员函数?

  21. 21

    将指向模板类对象的指针正确传递给函数

  22. 22

    可以将变量模板作为模板模板参数传递吗?

  23. 23

    C ++将指向成员的指针作为模板参数传递

  24. 24

    将变量的指针作为基于模板的参数传递

  25. 25

    从CLI将URL作为参数传递给ARM模板

  26. 26

    将模板类作为类成员函数内的模板模板参数传递

  27. 27

    传递指针类型作为模板参数

  28. 28

    如何将std :: get作为参数传递给模板函数?

  29. 29

    将std :: integer_sequence作为模板参数传递给元函数

热门标签

归档