template-meta-programming

    10热度

    3回答

    备注:此问题最初是在2012年问及的。在decltype说明符完全由任何主要编译器实现之前。除非您只能访问C++ 03,否则不应该查看此代码。所有主要的C++ 11兼容编译器现在都支持decltype。 有没有简单的方法来检索会员的类型? 在C++ 03 struct Person { std::string name; int age; double sal

    0热度

    1回答

    我怎么能做到以下几点,而不必包含在此文件中的每个T类?: // ComponentMan.h class ComponentMan { public: template<class T> void CreateComponent<T>() { T* temp = new T(); } } 基本上,我想一个通用类instantiater

    3热度

    2回答

    我该如何实现以下任何无效类型? 我觉得我目前的解决方案缺乏,因为我需要为每一个类型的,我希望它一起工作做一个类模板特: template<typename T> struct get_value_type { typedef typename T::value_type value_type; }; template<typename E> struct get_value_

    5热度

    2回答

    如果将以下代码中的X转换为使用C++ 11变量模板,并且应该支持任意数量的模板参数,那该怎么办? template<int OFFSET> struct A { enum O { offset = OFFSET }; enum S { size = 2 }; }; template<int OFFSET> struct B { enum O { offset = OFFSET }; enu

    10热度

    1回答

    我有一个模板类,我有一些专业化的。 但下一个专业化是模板本身。你如何指定这个: template<typename T> class Action { public: void doStuff() { std::cout << "Generic\n"; } } // A specialization for a person template<> class Action<

    5热度

    2回答

    假设我有一个包含成员变量f的函数my_struct。 f可能是一个C++ 11 lambda函数。 由于分配给lambda对象是非法的,我想实现my_struct的赋值运算符,这样当f是lambda时,它不被赋值。 是否有可能建立一个类型性状is_lambda它可以检查类型为lambda-ness? 在代码: #include <type_traits> template<typename F

    2热度

    2回答

    在this article,笔者断言: ...程序确实显示模板实例化机制是可以在编译时完成重要的计算原始递归语言。 我发现这很有趣,因为我帮助教授计算理论中的一门课,该课深入了原始递归函数的理论。然而,我的印象是模板元编程是图灵完备的,这是一个严格的强烈的说法,而不是说它是原始的递归......毕竟,创建一个模板元程序并不是很难,它不会停止。 我错过了什么吗?模板元语言是一种严格的原始递归语言,还

    0热度

    1回答

    的第一M个元素我有一个与boost::mpl::vector元素N,说: typedef boost::mpl::vector<int,float,double,short,char> my_vector; 我希望获得含my_vector第一M元件的序列。所以,如果M是2我想出来一个: typedef boost::mpl::vector<int,float> my_mvector; 起初

    6热度

    6回答

    我有以下的模板类和类型的(全局)变量: template <typename ClassT> struct ClassTester : public ClassT { typedef ClassT type; }; ClassTester<int> *aaa; // No error here 我希望编译错误,因为int无法得到,但在Visual C编译没有++ 2010 如

    4热度

    2回答

    我要实现一组类模板和两个特殊变量,_1和_2。 他们应该进行以下一项法规: // Sort ascending std::sort(a, a+5, _1 > _2); // Output to a stream std::for_each(a, a+5, std::cout << _1 << " "); // Assign 100 to each element std::for_e