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
(用于传递类型模板参数)嗨,我还有一个问题,如果我想传递一个带参数的函数怎么办?这个解决方案还能处理这个问题吗?@ravenisadeskoperator()
可以接受您需要的任何参数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>{}();
// ...
}