C++ 我是否可以将模板函数用作另一个模板';s参数?

C++ 我是否可以将模板函数用作另一个模板';s参数?,c++,C++,例如,我有一个模板函数: template <typename T> void SizeOf() { std::cout << sizeof(T) << std::endl; } template <typename T, template<typename S> class F> void CallOn(T t) { ... F<T>(); ... } 模板 void SizeOf(){ std::c

例如,我有一个模板函数:

template <typename T>
void SizeOf() {
  std::cout << sizeof(T) << std::endl;
}
template <typename T, template<typename S> class F> 
void CallOn(T t) {
  ...
  F<T>();
  ...
}
模板
void SizeOf(){

std::cout不能将函数模板作为参数传递(函数或模板的)

您可以通过以下方式将模板类作为模板参数传递:

template <typename T>
struct SizeOf
{
  void operator()() const {
    std::cout << sizeof(T) << std::endl;
  }
};

template <typename T, template <typename> class F> 
void CallOn(T t) {
  // ...
  F<T>{}();
  // ...
}
模板
结构尺寸
{
void运算符()()常量{

std::cout btw正确的语法应该是
模板类F
,这是错误的第二部分,答案也有correct@idclev463035818:虽然不确定是打字错误,OP可能希望使用
模板函数F
(不支持)。老实说,我不是故意添加
类的,因为这意味着要传递一个类,而不是一个函数。但我决定在问题中添加它,以避免讨论语法/语法问题。可能是误解。我的注释和错误“模板参数“F”的显式指定参数无效”参考的是错误的
S
(用于传递类型模板参数)嗨,我还有一个问题,如果我想传递一个带参数的函数怎么办?这个解决方案还能处理这个问题吗?@ravenisadesk
operator()
可以接受您需要的任何参数want@idclev463035818,谢谢,我没有使用
操作符()
之前,感谢您指出。
/home/liu/source/cppsh/main.cpp:14:3: error: no matching function for call to 'CallOn'
  CallOn<double, SizeOf>(pi);
  ^~~~~~~~~~~~~~~~~~~~~~
/home/liu/source/cppsh/main.cpp:8:6: note: candidate template ignored: invalid explicitly-specified argument for template parameter 'F'
void CallOn(T t) {
     ^
1 error generated.
template <typename T>
struct SizeOf
{
  void operator()() const {
    std::cout << sizeof(T) << std::endl;
  }
};

template <typename T, template <typename> class F> 
void CallOn(T t) {
  // ...
  F<T>{}();
  // ...
}