小编Sky*_*leh的帖子

这种","运算符的使用是否被视为不良形式?

我已经创建了一个列表类作为替换我的程序中的可变参数函数的方法,该程序用于初始化需要包含更改的元素列表的对象.list类有一个我非常喜欢的用法语法.但是我之前没有看过它,所以我想知道我是不是因为这个事实而不应该使用它?列表类的基本实现看起来像这样......

#include <list>
#include <iostream>
template<typename T>
struct list
{
    std::list<T> items;
    list(const list&ref):items(ref.items){}
    list(){}
    list(T var){items.push_back(var);}
    list& operator,(list add_){
        items.insert(items.end(),add_.items.begin(), add_.items.end());
        return *this;
    }
    list& operator=(list add_){
        items.clear();
        items.insert(items.end(),add_.items.begin(), add_.items.end());
        return *this;
    }
    list& operator+=(list add_){
        items.insert(items.end(),add_.items.begin(), add_.items.end());
        return *this;
    }
};
Run Code Online (Sandbox Code Playgroud)

这允许我在代码中使用它,如此...

struct music{
//...
};
struct music_playlist{
    list<music> queue;
//...
};
int main (int argc, const char * argv[])
{
    music_playlist playlist;
    music song1;
    music song2;
    music song3;
    music song4;
    playlist.queue = song1,song2; // The queue now …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading comma

28
推荐指数
6
解决办法
1697
查看次数

0xDEADBEEF与NULL

在各种代码中,我已经看到调试版本中的内存分配NULL...

memset(ptr,NULL,size);
Run Code Online (Sandbox Code Playgroud)

或者0xDEADBEEF......

memset(ptr,0xDEADBEEF,size);
Run Code Online (Sandbox Code Playgroud)
  1. 使用每一个有什么好处,在C/C++中实现这一目标的首选方法是什么?
  2. 如果为指针指定了值0xDEADBEEF,是否仍然不符合有效数据?

c c++ null pointers

27
推荐指数
4
解决办法
1万
查看次数

OpenGL FBO渲染缓冲或纹理附件

在什么情况下我想在OpenGL FBO中使用renderbuffer附件,而不是纹理附件,除了默认的帧缓冲区?因为,纹理附件看起来更加通用.

opengl

20
推荐指数
1
解决办法
3207
查看次数

AAC/MP3许可

如果我使用iPhoneOS中包含的音频解码库(例如AVAudioPlayer).我还需要支付Thomson或VIA Licensing的许可证才能合法解码我的应用程序中的AAC或MP3文件吗?

编辑:

我无法找到ADC的确切答案(他们不知道),我也对其他平台上的音频库感到好奇(Windows,Mac,Android ......)所以我在这个问题上添加了一笔赏金.

iphone mp3 licensing aac

14
推荐指数
3
解决办法
5287
查看次数

更新已提交给Game Center的分数

现在我正在开发一款针对iOS的Black Jack游戏,并希望有一个排行榜,显示哪些玩家目前拥有最多的"钱".因此,如果他们获得高分然后失去"钱",它将更新他们的高分以匹配用户当前的金额,这将比以前少.有什么方法可以用Game Center做到这一点吗?

ios game-center

12
推荐指数
2
解决办法
1520
查看次数

什么是C++中可变函数的良好类型安全替代品?

与这个问题联合起来.我无法为以下看似基本的问题提出一个良好的类型安全解决方案.我有一个类music_playlist,它有一个应该播放的歌曲列表.看起来非常简单,只需创建队列中所有歌曲的std :: list,并将其提供给用户.然而,出于必要,音频解码和音频呈现发生在不同的线程上.因此列表需要受互斥保护.很多时候,使用我的库的其他程序员忘记了互斥锁.这显然导致了"奇怪"的问题.

所以起初我只是为班级编写了setter.

struct music{};
class music_playlist{
private:
     std::list<music> playlist;
public:
     void add_song(music &song){playlist.push_back(song);}
     void clear(){playlist.clear();}
     void set_list(std::list<music> &songs){playlist.assign(songs.begin(),songs.end());}
//etc
};
Run Code Online (Sandbox Code Playgroud)

这导致用户代码如下...

music song1;
music song2;
music song3;
music song4;
music song5;
music song6;
music_playlist playlist1;
playlist1.add_song(song1);
playlist1.add_song(song2);
playlist1.add_song(song3);
playlist1.add_song(song4);
playlist1.add_song(song5);
playlist1.add_song(song6);

//or
music_playlist playlist2;
std::list<music> songs;
songs.push_back(song1);
songs.push_back(song2);
songs.push_back(song3);
songs.push_back(song3);
songs.push_back(song5);
songs.push_back(song6);
playlist2.set_list(songs);
Run Code Online (Sandbox Code Playgroud)

虽然这是有效的,但非常明确.输入是非常繁琐的,并且由于实际工作周围的所有残余而容易出错.为了证明这一点,我实际上故意在上面的代码中添加了一个错误,这样的东西很容易制作,并且可能不会触及代码评论,而song4永远不会在播放列表2中播放.

从那里我开始研究可变函数.

struct music{};
class music_playlist{
private:
     std::list<music> playlist;
public:
     void set_listA(music *first,...){
     //Not guaranteed to work, but usually does... bleh
         va_list Arguments; …
Run Code Online (Sandbox Code Playgroud)

c++ variadic type-safety

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

初始化类成员引用变量,就像它是常规变量一样

现在,我正在为我正在开发的游戏编写物理引擎.通常,当您将物理引擎与游戏引擎结合使用时,会有许多重复值.例如表示对象的位置和旋转的变量.对于大多数物理引擎,您必须遍历所有对象并根据物理引擎的对象位置更新其位置.所以我认为最好让物理引擎对象中的位置和旋转值引用游戏引擎对象处理旋转和位置的变量.但是,有时您希望物理引擎中的对象不直接与游戏引擎中的对象相关联.(隐形墙,关节).因此,您需要将对象视为常规成员变量......所以这就是我所拥有的.

struct object{
  float & xPosition;
  float & yPosition;
  float & zPosition;
  ...
  object(float & xPos, float& yPos, float& zPos):xPosition(xPos), yPosition(yPos), zPosition(zPos){}
  object():xPosition(*new float(0.0f)), yPosition(*new float(0.0f)), zPosition(*new float(0.0f)){}
};
Run Code Online (Sandbox Code Playgroud)

但是,这将导致内存泄漏,因为这些浮动没有被删除.对于如何在没有内存泄漏的情况下实现所需行为,您有什么建议吗?

编辑

我宁愿不使用boost.但是,我并不反对需要模板的解决方案.此外,这部分是性能优化,boost :: shared_ptr,似乎不是正确的解决方案.

c++ variables reference

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

这段代码将如何在大端机器上运行?

如果我有代码:

uint64_t a = 0x1111222233334444;
uint32_t b = 0;
b = a;
printf("a is %llx ",a);
printf("b is %x ",b);
Run Code Online (Sandbox Code Playgroud)

输出是:

 a is 1111222233334444 b is 33334444
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 大端机器上的行为是否相同?

  2. 如果我在b中指定一个值或者进行类型转换,那么大端的结果是否相同?

c endianness

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