vs2008-函数类型作为模板的类型参数,could not deduce template argument for 'T'

问题描述

函数类型作为模板的类型参数,could not deduce template argument for 'T'

模板定义:

template <typename UnaryFunction, typename ContextAcessor>
void ForEachApplication(UnaryFunction func) {
    using namespace utils;
    typename ContextAcessor::ApplicationListAccessor accessor;
    typedef typename ContextAcessor::ApplictionSetConstIt Iter;
    for (Iter it = accessor.begin(); it != accessor.end(); ++it) {
        if (it->valid()) {
            ApplicationConstSharedPtr const_app = *it;
            func(ContextAcessor::instance()->application(const_app->app_id()));
        }
    }
}

模板调用:

void StateController::TempStateStopped(HmiState::StateID ID) {
    LOG4CXX_AUTO_TRACE(logger_);
    {
        sync_primitives::AutoLock autolock(active_states_lock_);
        active_states_.remove(ID);
    }

    ForEachApplication(std::bind1st(std::mem_fun(&StateController::ApplyPostponedStateForApp), this));
}

编译错误:

error C2783: 'void application_manager::StateController::ForEachApplication(UnaryFunction)' : could not deduce template argument for 'ContextAcessor'

编译环境:win7_x64+vs2008

请大神帮帮忙,怎么解决啊~~~

解决方案

说的很清楚,没办法推定类型,因为你的函数参数没有ContextAcessor,所以不知道它的类型,需要指定下
http://stackoverflow.com/questions/19221183/could-not-deduce-template-argument-for-t

解决方案二:

如果要指定类型,那么需要同时指定UnaryFunction和ContextAcessor的类型, ContextAcessor的类型我知道怎么指定,但是UnaryFunction的类型怎么指定?ApplyPostponedStateForApp是类StateController的**成员函数**,如何指定它作为UnaryFunction的类型?

时间: 2024-11-08 20:19:02

vs2008-函数类型作为模板的类型参数,could not deduce template argument for &amp;#39;T&amp;#39;的相关文章

《深入理解C++11:C++ 11新特性解析与应用》——2.11 模板函数的默认模板参数

2.11 模板函数的默认模板参数 类别:所有人 在C++11中模板和函数一样,可以有默认的参数.这就带来了一定的复杂性.我可以通过代码清单2-26所示的这个简单的模板函数的例子来回顾一下函数模板的定义. 在代码清单2-26中,当编译器解析到函数调用fun(1)的时候,发现fun是一个函数模板.这时候编译器就会根据实参1的类型const int推导实例化出模板函数void TempFun(int),再进行调用.相应的,对于fun("1")来说也是类似的,不过编译器实例化出的模板函数的参数

有关swift函数类型作为返回类型疑惑

问题描述 有关swift函数类型作为返回类型疑惑 func chooseStepFunction (backwards:Bool)->(Int)->Int{ return backwards ? a :b } 我想请问下这里的(Int)->Int 具体是什么意思,小白刚开始学swift不懂 解决方案 参数为Int,返回值为Int的函数, 按照你上面所写, a和b 分别代表一个参数为Int,返回值也为Int的函数 解决方案二: Swift 函数类型作为返回值使用swift 中 函数类型参数

函数类型做参数-Swift函数类型作函数参数与闭包有什么区别?

问题描述 Swift函数类型作函数参数与闭包有什么区别? 各路大神,请指教啊 func printIntNum(add: (Int, Int) -> Int, a: Int, b: Int) { println("num = (add(a,b))") } 这个函数中参数 add该怎么理解,在外部调用时,既可以用一个闭包block直接实现,还可以用另外一个函数去代替,该怎么理解??? 解决方案 这是一件事情的两个说法,函数类型作函数参数,就是把函数作为参数传进去,既可以传匿名函数,

《深入理解C++11:C++ 11新特性解析与应用》——2.13 局部和匿名类型作模板实参

2.13 局部和匿名类型作模板实参 类别:部分人 在C++98中,标准对模板实参的类型还有一些限制.具体地讲,局部的类型和匿名的类型在C++98中都不能做模板类的实参.比如,如代码清单2-30所示的代码在C++98中很多都无法编译通过. 在代码清单2-30中,我们定义了一个模板类X和一个模板函数TempFun,然后分别用普通的全局结构体.匿名的全局结构体,以及局部的结构体作为参数传给模板.可以看到,使用了局部的结构体C及变量c,以及匿名的结构体B及变量b的模板类和模板函数,在C++98标准下都无

《Swift 权威指南》——第6章,第6.9节函数类型

6.9 函数类型 Swift语言支持定义函数类型(类似于C语言的函数指针).一个函数类型需要指定下面3个要素. 函数参数个数.函数参数类型.函数返回值.函数类型和其他数据类型的使用方法完全相同,在冒号(:)后面指定类型.定义函数类型时除了不需要指定参数名和函数体外,和函数定义完全相同. 下面的代码定义了两个函数类型变量(fun1和fun2). var fun1: (inout String, Int) -> String var fun2: (String, String...) -> Str

C++中成员函数(member function)模板(template) 详解

成员模板(member template) 既可以在普通类(ordinary class), 也可以在类模板(class template); 在普通类中, 在使用成员函数时, 不用提供模板参数, 函数可以根据使用的参数, 自动推导(deduce)模板实参(template argument)对应模板形参(template parameter); 在类模板中, 成员函数的模板参数(template parameter)可以和类的模板参数不同, 但在定义(definition)中, 必须添加两个模

JavaScript Function函数类型介绍

 // 在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例;而且都与其他引用类型一样具有属性和方法; // 由于函数是对象,因此函数名实际上也是一个指向函数对象的指针; 一 函数的声明方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1.函数声明方式 function box(num1,num2){ return num1+num2; }   2.函数表达式定义函数 var box = function(num1,num2){

Javascript函数类型的判断

在判断函数类型时,我们使用的是typeof方法,比如: function fn(){   //content   }   alert(typeof fn)//结果是"function".  但是,该方法在一些浏览器中并不是像我们想像的那样工作. 1.Firefox2和Firefox3 在这两个浏览器中,用typeof检测HTML对象元素的类型,得到是一个不精确的"function"结果,而不是"object",如HTMLDocument.如: a

Object-C---&amp;gt;Swift之(六)函数类型

认识函数类型 每个函数都有特定的函数类型 函数类型是由函数的形参类型.->和返回值类型组成. 例如: func Add(a:Int,b:Int){ ... } 该函数的函数类型为(Int,Int)->Void或者(Int,Int)->() func Add()->Int{ ... } 该函数的函数类型为()->Int func Add(){ ... } 该函数的函数类型为()->()或者()->Void func Add(a:Int,b:Int)->Int{