小编def*_*ode的帖子

Go中的条件编译

我试图写一个围棋包装CGOENET.

当我尝试在Mac上编译我的包装器时,库较旧并且界面略有不同.99%的代码是相同的,只需要改变一些C调用.

在Go中处理这样的问题的最佳做法是什么?
有没有办法进行条件编译或条件导入?

go cgo

6
推荐指数
2
解决办法
1116
查看次数

将结构初始化为指针或不作为指针

type Vertex struct {
    X, Y float64
}

func main() {
    v := Vertex{3, 4}
    fmt.Println(v)

    d := &Vertex{3, 4}
    fmt.Println(d)
}
Run Code Online (Sandbox Code Playgroud)

http://play.golang.org/p/XluyUHL2y7

这两种初始化Vertex结构的方法有什么区别?

我知道第二个是指针分配,但我在实践中看不出这个解决方案的任何区别.

go

6
推荐指数
1
解决办法
259
查看次数

在包含500,000个文件的目录中快速访问文件

我有一个包含500,000个文件的目录.我想尽快访问它们.该算法要求我重复打开和关闭它们(不能同时打开500,000个文件).

我怎样才能有效地做到这一点?我原本以为我可以缓存inode并以这种方式打开文件,但是*nix没有提供通过inode打开文件的方法(安全性或其他一些方法).

另一个选择是不要担心它,并希望FS在文件查找目录中做得很好.如果这是最好的选择,哪个FS最好.某些文件名模式是否比其他文件模式更快?例如01234.txt vs foo.txt

顺便说一句,这完全在Linux上.

c++ linux filesystems file-io inode

5
推荐指数
2
解决办法
883
查看次数

PVRTC压缩增加了PNG的文件大小

对于iPhone游戏开发,我为了性能而从PNG格式切换到PVRTC格式.但是PVRTC压缩正在创建比PNG文件大得多的文件.因此,一个140 KB(1024x1024)的PNG在PVRTC格式中膨胀到512 KB或更多.我在某处读到一个50KB的PNG文件被压缩到大约10KB,所有,在我的情况下,它的另一种方式..

任何理由为什么会这样发生以及如何避免这种情况..如果PVRTC压缩盲目地进行4bpp转换(1024x1024x0.5)而不考虑PNG中的透明度,那么我们在这里实现的压缩是什么.

我的游戏中有100个这样的1024x1024图像,因为有很多角色各自做一些复杂的动画..所以在这个512KB的图像速率下,我的应用程序将超过50MB ..这对我的客户来说是不可接受的..(与PNG,我本可以将我的应用程序设置为10MB)

compression png image-processing pvrtc

5
推荐指数
1
解决办法
7268
查看次数

任何函数都可以是删除函数吗?

工作草案明确地指出,默认函数必须是特殊的成员函数(例如复制构造函数,默认构造函数等,(§8.4.2.1-1)).这很有道理.

但是,我没有看到对删除函数的任何此类限制(第8.4.3节).是对的吗?

或者换句话说这三个例子是否有效c++0

struct Foo
{
   // 1
   int bar( int ) = delete;
};


// 2
int baz( int ) = delete;


template< typename T >
int boo( T t );

// 3
template<>
int boo<int>(int t) = delete;
Run Code Online (Sandbox Code Playgroud)

c++ deleted-functions c++11

5
推荐指数
1
解决办法
653
查看次数

默认初始化积分成员是否首选空初始值设定项?

我刚刚看了一个由GMAN评论

class A
{
public:
   A() :
      m_ptr() // m_ptr is implicitly initialized to NULL
   { }
};
Run Code Online (Sandbox Code Playgroud)

应该优先考虑

class A
{
public:
   A() :
      m_ptr(NULL) // m_ptr is explicitly initialized to NULL
   { }
};
Run Code Online (Sandbox Code Playgroud)

请注意NULL第一个示例中缺少的内容.

GMan对吗?这可能有点主观,所以"你更喜欢空的初始化器进行默认初始化吗?" 可能更合适.

此外,如果您更喜欢空的初始化器,这是否适用于其他整体成员?

class B
{
public:
   B() :
      m_count(),
      m_elapsed_secs()
   {}
private:
   std::size_t m_count;
   float m_elapsed_secs;  //the elapsed time since instantiation
};
Run Code Online (Sandbox Code Playgroud)

当然,请捍卫您的观点,并说明为什么一个人应该优先于另一个.

c++ ctor-initializer

5
推荐指数
1
解决办法
297
查看次数

是否有儿童命令来补充父母的命令?

Mercurial提供命令父级来检查给定修订版的父级.这可以很容易地用于向后遍历DAG.我需要向前穿越DAG.有hg children命令吗?

mercurial dvcs

5
推荐指数
1
解决办法
1534
查看次数

完美地模拟nullptr

我厌倦了等待编译器的支持nullptr(gcc 4.6确实如此,但它是如此新的少数发行版支持它).

因此,作为一个止损间隙直到nullptr完全支持我决定模仿它.有两个仿真示例:一个来自这里,一个来自wikibooks.

值得注意的是,两个实现都没有提及operator ==.但是,没有一个,以下代码将无法编译.

int* ptr = nullptr;
assert( ptr == nullptr ); // error here: missing operator ==
Run Code Online (Sandbox Code Playgroud)

这个operator ==错误是编译器错误吗?
operator ==(和!=,<,<=,等)需要更完美的模拟nullptr
模拟nullptr和真实交易还有什么不同?

c++ null nullptr c++11

5
推荐指数
1
解决办法
1439
查看次数

将传递的参数限制为字符串文字

我有一个类来包装字符串文字并在编译时计算大小.

构造函数如下所示:

template< std::size_t N >
Literal( const char (&literal)[N] );

// used like this
Literal greet( "Hello World!" );
printf( "%s, length: %d", greet.c_str(), greet.size() );
Run Code Online (Sandbox Code Playgroud)

但是代码有问题.下面的代码编译,我想使它成为一个错误.

char broke[] = { 'a', 'b', 'c' };
Literal l( broke );
Run Code Online (Sandbox Code Playgroud)

有没有办法限制构造函数,使它只接受c字符串文字?编译时间检测是首选,但如果没有更好的方法,则可以接受运行时.

c++ string-literals c++11

5
推荐指数
2
解决办法
2342
查看次数

使用extern模板时链接器错误

我有一个模板工作代码.与stl :: string类似,我主要使用我的模板,在多个编译单元中有一个参数.为了节省时间,我试图使用extern实例化.但是,如下更改行会产生错误.做正确的方法是什么?(PS使用c ++ 0x标志编译gcc)

typedef myTemplate_base<commonType> myTemplate;
extern template class myTemplate_base<commonType>; //using "extern template myTemplate" wont work
Run Code Online (Sandbox Code Playgroud)

我在项目中添加了一个带有以下内容的额外cpp文件.

template class myTemplate_base<commonType>;
Run Code Online (Sandbox Code Playgroud)

链接器出现此错误消息(myTemplate someVar;将主文件中的第一个对象instantiation()行作为错误源):

未定义的引用'myTemplate_base :: ~myTemplate_base()'

但是,此类型在类中具有以下定义 ~myTemplate() = default;

编辑:如果你有一个更好的标题请评论,所以合适的人看看这个

编辑2:有趣的是,添加template class myTemplate_base<commonType>会极大地增加可执行文件的大小(在450k二进制文件上+ 100k),即使模板在main中使用(编译我必须注释掉extern部分).这暗示链接器保持模板的两个实现具有相同的实例/我忽略了某些东西.

c++ linker templates c++11

5
推荐指数
1
解决办法
1534
查看次数