摘要:
在C++中调用lua函数的一般方式如下: 1 void callfunc1(lua_State* L, int arg1, const string& arg2)//调用脚本中的func1函数,参数为一个number,一个string 2 { 3 lua_getglobal(L, "func1"); 4 lua_pushnumber(L, arg1); 5 lua_pushstring(L, arg2.c_str()); 6 lua_pcall(L, 2, LUA_MULTRET, 0); 7 } 8 void callfunc2(lua_Sta... 阅读全文
摘要:
1. predicates STL 规定:面对相同的值,predicates 必须返回相同的结果2. 仿函数, 任何东西,只要行为与函数相似,都可以称为仿函数。(函数行为:可以使用小括号传递参数,籍以调用某个东西)因此,如果定义了一个对象,行为像函数,就可以当作函数来使用,例如: 1 class PrintInt { 2 public: 3 void operator() (int elem) const { 4 std::cout << elem << " "; 5 } 6 }; ... 阅读全文
摘要:
4.2 1. auto_ptr是一种智能指针(smart pointer),帮助程序员防止“异常被抛出时发生资源泄露” 2. std::auto_ptr<ClassA> ptr(new ClassA); //智能指针的声明3. auto_ptr所界定的是一种严格的拥有观念,因此绝对不能有一个物体同时被两个智能指针所拥有,因此严禁以同一个物体将两个智能指针初始化。4. 对于auto_ptr可以用另个一auto_ptr做为指针的初值,但不能是普通指针:1 std::auto_ptr<ClassA> ptr; //create an auto_ptr2... 阅读全文
摘要:
第十六章标题就是 模版与继承,看到这个标题给我的第一反应就是蛋疼,模版和继承,对我来说这两个方面本身已经很复杂了,让它们进行结合....不过人家不都是说么“有困难要学,没困难制造困难也要学!” 嗯,就是这个!通过周末两天的折腾,稍微看明白了一点思路,因此将这两天的所得写出来,希望大家一起学习,多多指教!在许多模版技术中,往往需要模版带有几个长串的类型参数,并设有合理的缺省值,如下:1 template 5 class BreadSlicer6 {7 };因此使用的时候只需 BreadSlicer 即可,不过如果需要指定某个特点的参数为非缺省值的时候,必须将前面的参数一一写出来(即便前面的几个参 阅读全文
摘要:
技巧性基础知识这章中主要讲述了一些与模板实际应用密切相关的一些更加深入的基础知识。主要包括: 1. 关键字 typename 2.使用this-> 3.成员模板 4.模板的模板参数 5.零初始化 6.字符串作为函数模板的实参1. 关键字typename 在C++中,引入typename是为了说明:模板内部的标识符可以是一个类型。譬如下面:1 template <typename T>2 class MyClass {3 typename T::SubType * ptr;4 ....5 }; 上面第三行的typename就是用来说明SubType是个类型,ptr是个指向Sub 阅读全文
摘要:
1 template <int N> 2 class X { 3 public: 4 typedef int I; 5 void f(int) { 6 std::cout << "f!" << std::endl; 7 } 8 }; 9 10 template <int N>11 void fppm (void (X<N>::*p)(typename X<N>::I) ); //此处调用了一个函数12 13 int main() {14 fppm(&X<33>::f);15 }上面第 阅读全文
摘要:
c++ template 阅读全文
摘要:
1. FUNCTION TEMPLATES 函数模版主要用来表示一系列的具有相似性质的函数,把这些不同函数间不同之处进行参数化。 模版一般形式:1 template <typename T> 2 inline T const& max (T const& a, T const& b)3 {4 return a < b ? b : a;5 } 对于多个类型参数 在尖括号中逗号隔开,如:template <typename T1, typename T2, ...> 如果使用到的类型不支持模版中使用到的操作,则会编译出错, 如:std::com 阅读全文