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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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++ 模板函数中的void参数_C++_Templates - Fatal编程技术网

C++ 模板函数中的void参数

C++ 模板函数中的void参数,c++,templates,C++,Templates,我尝试创建泛型转换函数。 如何创建比可以有void参数的模板函数?大概是这样的: template<typename T1> bool convert(T1 arg) { return true; } template<typename T1 = void> bool convert(T1 arg) { return false; } void voidFn() { return; } bool boolFn() { return t

我尝试创建泛型转换函数。 如何创建比可以有void参数的模板函数?大概是这样的:

template<typename T1>
bool convert(T1 arg) {
    return true;
}

template<typename T1 = void>
bool convert(T1 arg) {
    return false;
}

void voidFn() {
    return;
}

bool boolFn() {
    return true;
}

void main() {
   cout << convert(boolFn());  //ok return true
   cout << convert(voidFn());  //compile error no matching function 
}
模板
布尔转换(T1 arg){
返回true;
}
模板
布尔转换(T1 arg){
返回false;
}
void void fn(){
返回;
}
bool boolFn(){
返回true;
}
void main(){

CUT< P>没有C或C++中的“空格参数”,这是用普通重载:

template<typename T1>
bool convert(T1 arg) {
    return true;
}

bool convert() {
    return false;
}
模板
布尔转换(T1 arg){
返回true;
}
布尔转换(){
返回false;
}

另外,根据实际的细节,有可能有一个单一的模板函数使用C++17及更高版本中的
std::optional
和用户定义的演绎指南。

函数不能有
void
参数

但是您可以使用
void
类型模板参数。因此,您需要一个选择
void
/非
void
返回函数的函数,您可以尝试以下操作

#include <iostream>

template <typename>
bool convert ()
 { return true; }

template <>
bool convert<void> ()
 { return false; }

void voidFn ()
 { return; }

bool boolFn ()
 { return true; }

int main ()
 {
   std::cout << convert<decltype(boolFn())>() << '\n'; // print 1
   std::cout << convert<decltype(voidFn())>() << '\n'; // print 0
 }
#包括
模板
布尔转换()
{返回true;}
模板
布尔转换()
{返回false;}
void void fn()
{return;}
bool boolFn()
{返回true;}
int main()
{

std::难道你不能将
void
传递给函数吗?另外,
void main()
是无效的C++我想你要做的是
template bool convert(T1 arg)
,但是正如Chris在上面指出的,你不能实例化
void
变量。我认为
convert(voidFn());
仍然无法编译