相关疑难解决方法(0)

是否可以使用is_functor C++特征类?

如果参数是C++函数对象(仿函数),我如何静态推导出?

template <typename F>
void test(F f) {}
Run Code Online (Sandbox Code Playgroud)

我试过了is_function<F>::value,但这不起作用.它似乎也没有is_functor特质,所以也许这是不可能的.我似乎只是在寻找一个特定的成员函数,在本例中是函数调用操作符:F::operator().

c++ traits functor type-traits c++11

12
推荐指数
2
解决办法
2493
查看次数

C++ 98/03 std :: is_constructible实现

我的业余爱好库的基本组件必须与C++ 98和C++ 11编译器一起使用.要了解和欣赏自己,我创建了几个类型支持的功能(如C++ 98级的实现enable_if,conditional,is_same,is_integral为了使用它们的时候没有C++ 11的支持等...).

然而,当我实施时,is_constructible我陷入困境.有没有任何模板魔术(某种SFINAE),我可以用它来实现它而不需要C++ 11支持(declval)?

当然在C++ 03中没有可变参数模板支持,所以我将把实现专门化到一定深度.主要问题是,是否存在可以决定T是否可以从给定类型构造的技术.

c++ compile-time sfinae c++11 c++03

8
推荐指数
3
解决办法
1464
查看次数

获取类中的字段数

有没有办法获得一个类的字段数?

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++ templates type-traits template-meta-programming c++11

7
推荐指数
2
解决办法
1316
查看次数