Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板类2重载函数_C++_Templates_C++11 - Fatal编程技术网

C++ 模板类2重载函数

C++ 模板类2重载函数,c++,templates,c++11,C++,Templates,C++11,我创建了一个object的模板类,希望在T==int时运行第二个函数。但我的问题是,在sec func()中,我希望在该对象上运行第一个func 我该怎么做 template<typename T> Object<T>::func(){ } template<> Object<int> Object<int>::func(){ //somecode // I want here run the

我创建了一个object的模板类,希望在T==int时运行第二个函数。但我的问题是,在sec func()中,我希望在该对象上运行第一个func

我该怎么做

 template<typename T> Object<T>::func(){

 } 

 template<> Object<int> Object<int>::func(){
        //somecode
        // I want here run the first func() on the object.
 }
模板对象::func(){
} 
模板对象对象::func(){
//一些代码
//我想在这里对对象运行第一个func()。
}

谢谢

将接口与实现分离很简单:

template<typename T> Object<T>::func_impl(){
  // Do stuff here
}

template<typename T> Object<T>::func(){
  // all func does is call func_impl
  func_impl<T>();
} 

template<> Object<int> Object<int>::func(){
  // Maybe do some stuff...
  func_impl<int>(); // ... then call your implementation...
  // .. and maybe do some more stuff
}
模板对象::func_impl(){
//在这里做事
}
模板对象::func(){
//func所做的就是调用func_impl
func_impl();
} 
模板对象对象::func(){
//也许做点什么。。。
func_impl();/…然后调用您的实现。。。
//…也许还能做更多的事情
}

澄清一下:您所做的是而不是过载。它被称为模板专门化。如果您为给定类型提供了专门化,则无法为该类型实例化泛型模板。

请使用另一个函数
func\u实现
,然后转发到该函数。他们无法通过强制转换或其他方式来实现吗?super?@Alon,不,在
对象
对象
之间没有基类/派生类关系。上次调用
func_impl
时发生了什么
T
?@DanielJour感谢您的关注。更正。