typetraits

    1热度

    1回答

    我正在为旧程序添加新内容,他们在任何地方都使用元编程。我仍然在c + + 03和提高。 因此,这里是一个问题: 我做模板的功能,我不希望因为在四个功能唯一的区别专门调用来获得特定的值: template < typename Message > void function(const Message & message) { .... int value = getHelp

    1热度

    1回答

    我有一个函数模板,我想限制它可以实例化的类型的集合。 我写了这样的事情: template <typename T> void DoSomething(/* ... Some parameters involving T ... */) { // Check at compile-time that T is allowed static_assert( std:

    2热度

    1回答

    有没有一种方法可以获得所有导入的模块或其他方式?据我所见,“allMembers”不会包含导入的成员。 我想实现的是从导入的模块中导入所有成员,但它看起来并不像我想象的那么容易。如果我指定了导入的完整模块,我可以很容易地获得我想要的成员,但是如果我使用当前模块本身,则不会。 所以我的问题是,有没有办法在D中获取所有导入模块的名称,因为这样我就可以创建一个在模块上使用“allMembers”的动态方

    1热度

    3回答

    为什么编译器可以推断T搭配验证码: #include <vector> template<typename T> void foo(T& t) {} int main(void) { std::vector<uint8_t> vec = { 1,2,3 }; foo(vec); return 0; } 但没有与此代码: #include <vector

    3热度

    2回答

    如何检查C++ 11中的类型是否相等? std::uint32_t == unsigned; //#1 而另一片断 template<typename T> struct A{ string s = T==unsigned ? "unsigned" : "other"; }

    1热度

    1回答

    我有下面的代码,我用实施Tag Dispatching: template <class T> struct tag { typedef struct {} type; static const type value; }; 然后我用这个结构在几个定义提供的功能重载版本是,由于某种原因,可能会含糊不清。例如,我有一组unarchive函数,它们采用单个参数unarchi

    3热度

    2回答

    是否有检测的一类是正常类型,或者是模板类型(元类型)其可包括非类型参数任何方式?我想出了这个解决方案: #include <iostream> template <template<class...> class> constexpr bool is_template() { return true; } template <class> constexpr bool i

    3热度

    3回答

    考虑这个例子: #include <iostream> #include <type_traits> template <class, class = void> struct is_defined : std::false_type { }; template <class T> struct is_defined<T, std::enable_if_t<std::is

    2热度

    1回答

    我很想在这里,但我想要对这个问题进行精确的描述。我想单独通过他们的名字改进检测成员模板的实现,但是我遇到了一个障碍。我无法找到任何方法来检测超载的static /非static成员函数。这个问题非常重要的部分是,我不能使用this trick,因为它检测到任何名称(我已经在当前实现中使用它,有点用处),并且我不能指定类型,因为它忽略了点单独使用名字。 仅供参考,请参阅我的other questio

    0热度

    1回答

    (例如得到std::list<some_value_type>std::list) 考虑下面的代码: #include <list> #include <string> std::string combine(int val, std::string str) { return std::to_string(val) + str; } template <class T,