gcc,g++,extern “C” :一些编译错误的缘由

正好是我们代码中遇到的问题,之前不求甚解,只用g++编译没有错误就不管了,现在要跨平台到windows下就遇到了问题。
全文转载自:http://user.qzone.qq.com/75172588/blog/1248167335 Continue reading “gcc,g++,extern “C” :一些编译错误的缘由”

C++矩阵库比较

同化系统中要大量使用矩阵类,现在使用的是之前有我们自己发展的纯C++的一个矩阵类,而后又引入了IT++类的支持,现在回头来看,又有很多新的C++矩阵类库发展出来,并且有很好的特性。今天就用了几个测试代码在我的DELL T7400工作站进行了测试,主要比较的是我们自己的矩阵类、armadillo、IT++(参考文献中还有和其他矩阵类的比较)。 Continue reading “C++矩阵库比较”

c++的类模板

c++的类模板中有一些要注意的地方:
1、除非编译器实现了export关键字,否则将模板成员函数放置在一个独立的实现文件中将无法运行。(在GCC中,就是无法连接,编译可以通过)
因为模板不是函数,它们不能单独编译。模板必须与特定的模板实例化请求一起使用。

2、在类模板的操作符重载的友元函数中,要先声明,如<<操作符,要在函数后添加一对<>符合:

template
class Matrix;
template
ostream& operator <<(ostream& os,const Matrix& matrix);

template
class Matrix
{
public:
friend ostream& operator << <>(ostream& os,const Matrix& matrix);
}

而+-*/等操作符的友元重载则需要定义在类声明内部,否则连接会出错。

C# 2008:From Novice to Professional

Apress.Beginning.C.Sharp.2008.From.Novice.to.Professional.Nov.2007
书名:《C# 2008:From Novice to Professional》
作者:Christian Gross (Author)
出版商:Apress
发行日期:2007年11月
语言:英语
ISBN-10/ISBN-13:1590598695/978-1590598696
http://www.amazon.com/exec/obidos/tg/detail/-/1590598695/
book image

粗看了一遍,介绍的比较全面,感觉不是很深入。

生成UUID/GUID

php的生成办法:


Name = $_ENV["COMPUTERNAME"];
$address->IP = $_SERVER["SERVER_ADDR"];

return $address;
}

function toString()
{
return strtolower($this->Name.'/'.$this->IP);
}

}

class Random
{
function nextLong()
{
$tmp = rand(0,1)?'-':'';
return $tmp.rand(1000, 9999).rand(1000, 9999).rand(1000, 9999).rand(100, 999).rand(100, 999);
}
}

// 三段
// 一段是微秒 一段是地址 一段是随机数
class Guid
{

var $valueBeforeMD5;
var $valueAfterMD5;

function Guid()
{
$this->getGuid();
}
//
function getGuid()
{
$address = NetAddress::getLocalHost();
$this->valueBeforeMD5 = $address->toString().':'.System::currentTimeMillis().':'.Random::nextLong();
$this->valueAfterMD5 = md5($this->valueBeforeMD5);
}

function newGuid()
{
$Guid = new Guid();
return $Guid;
}

function toString()
{
$raw = strtoupper($this->valueAfterMD5);
return substr($raw,0,8).'-'.substr($raw,8,4).'-'.substr($raw,12,4).'-'.substr($raw,16,4).'-'.substr($raw,20);
}

}
?>

然后就可以这样调用:

1. toString();
5. ?>

linux下可以用uuidgen命令来生成UUID,也可以在c/c++程序里调用:

/* clear.c */
void uuid_clear(uuid_t uu);

/* compare.c */
int uuid_compare(const uuid_t uu1, const uuid_t uu2);

/* copy.c */
void uuid_copy(uuid_t dst, const uuid_t src);

/* gen_uuid.c */
void uuid_generate(uuid_t out);
void uuid_generate_random(uuid_t out);
void uuid_generate_time(uuid_t out);

/* isnull.c */
int uuid_is_null(const uuid_t uu);

/* parse.c */
int uuid_parse(const char *in, uuid_t uu);

/* unparse.c */
void uuid_unparse(const uuid_t uu, char *out);

/* uuid_time.c */
time_t uuid_time(const uuid_t uu, struct timeval *ret_tv);
int uuid_type(const uuid_t uu);
int uuid_variant(const uuid_t uu);

在ubuntu下,需要确认已经安装对应的库:

sudo aptitude install libuuid1 uuid-dev

c++中如何创建目录

c++中读写文件直接使用fstream就可以操作,但如何对目录进行操作?
一番搜索下来后,发现std库并不能处理目录的操作,需要使用额外库来进行操作。
windows平台下:

#include

CreateDirectory (char *DirName, SECURITY_ATTRIBUTES Attribs);

linux平台下:

#include

mkdir (const char *path, mode_t mode);

一个例子
#include
#include

int status;
...
status = mkdir("/home/cnd/mod1", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);

还可以使用boost的跨平台方案:

#include "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations
#include // for std::cout
using boost::filesystem; // for ease of tutorial presentation;
// a namespace alias is preferred practice in real code
create_directory( "foobar" );

BTW: boost filesystem在g++下的编译方法:

g++ -lboost_filesystem …

c++中的string转换

如何转换string到其他类型?如何从其他类型转换到string?
代码1:toString
template std::string toString(const T& a)
{
std::ostringstream ost;
ost << a; return ost.str(); }

代码2:fromString
templateT fromString( const std::string& s)
{
std::istringstream is(s);
T t;
is >> t;
return t;
}

使用方法:
int d = fromString( s );
string str=toString(d);

参考:
http://www.thescripts.com/forum/thread62219.html