如果参数是C++函数对象(仿函数),我如何静态推导出?
template <typename F>
void test(F f) {}
Run Code Online (Sandbox Code Playgroud)
我试过了is_function<F>::value,但这不起作用.它似乎也没有is_functor特质,所以也许这是不可能的.我似乎只是在寻找一个特定的成员函数,在本例中是函数调用操作符:F::operator().
我的业余爱好库的基本组件必须与C++ 98和C++ 11编译器一起使用.要了解和欣赏自己,我创建了几个类型支持的功能(如C++ 98级的实现enable_if,conditional,is_same,is_integral为了使用它们的时候没有C++ 11的支持等...).
然而,当我实施时,is_constructible我陷入困境.有没有任何模板魔术(某种SFINAE),我可以用它来实现它而不需要C++ 11支持(declval)?
当然在C++ 03中没有可变参数模板支持,所以我将把实现专门化到一定深度.主要问题是,是否存在可以决定T是否可以从给定类型构造的技术.
有没有办法获得一个类的字段数?
struct Base {
char a;
int b;
};
struct Derived : Base {
std::string c;
};
static_assert(num_fields<Base>::value == 2);
static_assert(num_fields<Derived>::value == 1);
Run Code Online (Sandbox Code Playgroud)
我发现了这个问题,但它已经过时了 - 我希望可以用C++ 14/17拼接一些东西(毕竟我们现在有类似magic_get的东西- 可能是它的一些子集......?)
编辑: - 编译器钩子也可以工作,即使它只适用于MSVC或GCC或Clang - 我使用全部3.
c++ ×3
c++11 ×3
type-traits ×2
c++03 ×1
compile-time ×1
functor ×1
sfinae ×1
templates ×1
traits ×1