C++ 模板函数中的void参数
我尝试创建泛型转换函数。 如何创建比可以有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
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());
仍然无法编译