C 检测是否存在接受特定类型的函数
C++ Detect if there exists a function by name that accepts a particular type
我想检测到给定类型的插入操作员。通常,我会检查具有适当签名的超载函数。说我有A类,然后
template<typename T>
struct insert_operator_type
{
using type = typename std::ostream&(*)(std::ostream&, const T&);
};
...
std::is_same<
decltype(static_cast<typename insert_operator_type<A>::type> (&operator<<)),
std::ostream&(*)(std::ostream&, A const&)
>::value
会告诉我他们是一样的,我可以推断出操作员存在。与运营商Lt;&lt;但是,A型B类型可能会分解为A型。说
之类的话template<typename T>
class A
{
public:
T* type1 = nullptr;
};
typedef A<int> BImpl;
class B : public BImpl
{
public:
B() {}
};
template<typename T>
std::ostream& operator<<(std::ostream& os, const A<T>& a)
{
os << "printing A<T>" << std::endl;
return os;
}
现在我可以
B b;
std::cout << b << std::endl;
但是没有
std::ostream&(*)(std::ostream&, B const&)
相反
我可以确定存在过载的函数,以便无法为特定类型指定该函数,而是针对给定类型的某种类型会转换为?
您可能只想使用sfinae检查整个表达式插入是否有效。
// std::void_t in C++1z
template <class...>
using void_t = void;
template <class, class = void_t<>>
struct can_be_ostreamed : std::false_type { };
template <class T>
struct can_be_ostreamed<T, void_t<
decltype(std::declval<std::ostream&>() << std::declval<T>())
>> : std::true_type { };
生活在coliru
相关文章:
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- C++ 这里有一个返回 (24) 的布尔返回类型函数
- 使用SFINAE来检测void返回类型函数的存在
- 使用此类型函数有什么优势
- 为什么此函数通过类型函数指针调用后,呼叫明智地行为
- 如何使用无类型函数指针调用C++成员函数
- 模板返回类型函数如何在C++中工作
- 具有通用类型函数的动态库[C ]
- 如何在返回类型函数模板的专用化中使用派生类型?( "couldn't infer template argument" )
- Bon appetit :从 int 返回类型函数在 main() 中打印字符串
- 对于需要其他模板参数的类型函数的部分模板专业化
- c++错误的参数类型-函数指针
- 延迟评估模板类型函数
- 在引用或指针返回类型函数上输入
- 具有指针数据类型的非类型函数模板参数
- STL中使用的C++自定义比较类型(函数谓词与较少结构)
- C++模板基类的非类型函数模板的 using 声明
- 字符串到类型函数,模板专用化使调用统一
- 自由类型函数可以接受 Unicode 文件名吗?