小编Kar*_*nek的帖子

返回无效的有效代码?

我发现以下代码被Visual C++ 2008和GCC 4.3编译器接受:

void foo()
{

}

void bar()
{
  return foo();
}
Run Code Online (Sandbox Code Playgroud)

它编译时我有点惊讶.这是语言功能还是编译器中的错误?C/C++标准对此有何看法?

c c++

56
推荐指数
3
解决办法
7934
查看次数

迭代器列表中的倒数第二个元素

我目前有以下for循环:

for(list<string>::iterator jt=it->begin(); jt!=it->end()-1; jt++)
Run Code Online (Sandbox Code Playgroud)

我有一个字符串列表,它在一个更大的列表中(list<list<string> >).我想循环遍历内部列表的内容,直到我到达倒数第二个元素.这是因为我已经处理了最终元素的内容,没有理由再次处理它们.

但是,使用it->end()-1无效 - 我不能在-这里使用运算符.虽然我可以使用--运算符,但这会在每个循环中减少最终的迭代器.

我相信STL列表是一个双向链表,所以从我的角度来看,应该可以做到这一点.

建议吗?提前致谢

c++ stl linked-list

16
推荐指数
3
解决办法
2万
查看次数

3D Perlin噪声分析导数

我目前正在使用Shader Model 4(DirectX 10 HLSL)实现3D Perlin噪声凹凸贴图.生成噪声本身并不是一个大问题(有大量的教程和代码),但我没有找到3D Perlin噪声的分析衍生物.

考虑到衍生品的唯一网站是Ignigo Quilez的网站和相关的GameDev.net讨论.问题是在第一个链接中噪声是基于值的,而不是基于梯度的(这是我的要求),在第二个链接中,只有2D梯度噪声导数.

请注意,我不是在寻找数值导数,因为那些需要生成4个相邻的噪声样本,而且开销太多了.

有人计算过这些衍生物吗?是否有使用它们的参考实现?

3d derivative perlin-noise

10
推荐指数
1
解决办法
4254
查看次数

游戏GUI框架

我目前正在重新触摸游戏的用户界面(即OpenLieroX).我正在寻找一个允许轻松创建GUI的库/框架.具体来说,这些是我的要求:

  • 开源 - 游戏是LGPL并且遇到许可证问题是我们想要关心的最后一件事:)
  • 跨平台 - 至少Linux/Unix,Mac OS X和Windows 2k +是必须的,但越多越好.
  • 稳定而成熟 - 我宁愿不使用一个月内会死的项目
  • 快速轻巧(编译不到15 MB) - 毕竟它适用于游戏
  • C++接口 - 游戏是用C++编写的
  • 易于使用 - 教程和良好的文档是一个很大的优点
  • 易于调整 - 应该很容易改变小部件的外观
  • 易于使用的样式语言 - 设计师可以使用的简单语言为游戏创建吸引人的皮肤
  • 添加自定义小部件的简单方法 - 我需要在界面中添加视口,角色皮肤等,并以我的方式呈现它们
  • 支持屏幕外渲染(进入缓冲区)

我已经尝试过这些库:

  • Webkit(各种端口) - 它很酷但不是真正用于游戏GUI.无法使用自定义绘图(视口等)添加自定义元素.
  • 启蒙 - 很酷的图书馆,但也是以Linux为中心的.特别是Windows端口不完整.
  • Qt - 很棒,但是屏幕外渲染不属于它的强度,主要是它太大了
  • GTK - 与Qt完全相同的问题,Mac OS X支持不佳

如果有人知道一个可以满足这些需求的框架,我将非常感激.感谢您的输入.

c++ user-interface

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

Java Web Start - 使用另一个本机依赖项加载本机依赖项

我正在使用Java Web Start来启动依赖于某些第三方本机库的Java应用程序.然后,这些本机库commonLib使用LoadLibrary/dlopen 加载另一个本机库()作为它们的依赖项.

不使用Web Start时,当本机库位于同一目录中时,一切都按预期工作.

但是,Web Start要求将本机库打包在jar文件中并在jnlp文件中引用,我这样做了:

  <!-- Windows OS -->
    <resources os="Windows">
        <nativelib href="native/native-windows.jar" />
    </resource>

  <!-- Linux OS -->
    <resources os="Linux">
        <nativelib href="native/native-linux.jar" />
    </resources>

  <!-- Mac OSX -->
    <resources os="Mac OS X">
        <nativelib href="native/native-osx.jar"/>   
    </resources>
Run Code Online (Sandbox Code Playgroud)

本机库加载正常但它们无法加载它们的依赖项commonLib- C++ LoadLibrary/dlopen调用失败,因为该文件存在于某个jar/cache文件夹中而不是当前库搜索路径中.

在Windows上,我能够commonLib在尝试加载JNI库之前通过在Java中预加载来解决此问题,如下所示:

System.loadLibrary("commonLib");
System.loadLibrary("myNativeLib");
Run Code Online (Sandbox Code Playgroud)

但是,这种方法在OS X上不起作用 - 本机代码中的dlopen失败.dlopen显然不够聪明,如果它已经加载,不再尝试加载库.

是否有一种跨平台的方式来打包和加载依赖于Java Web Start中其他本机库的本机库?

java java-native-interface java-web-start

8
推荐指数
1
解决办法
2075
查看次数

在C++中将函数参数检索为元组

考虑我有这样的函数声明:

void foo(int x, float y);

class X {
  void anotherFoo(double a, int c);
};
Run Code Online (Sandbox Code Playgroud)

如何获得与函数参数对应的元组?在上述情况下,它将是:

boost::tuple<int, float>
boost::tuple<X*, double, int>
Run Code Online (Sandbox Code Playgroud)

或者更好的结果类型为第0个元素:

boost::tuple<void, int, float>
boost::tuple<void, X*, double, int>
Run Code Online (Sandbox Code Playgroud)

我知道boost::function_types::parameter_types可以做到这一点.但是,我对如何实施的原则感兴趣.

c++ tuples function

7
推荐指数
1
解决办法
1297
查看次数

用于找出诱导子图是否完整的快速算法

我有一个无向无加权图G =(V,E)和一个随机选择的顶点子集S. 我想检查S中的顶点是否相互邻接(即形成一个完整的子图/一个集团).

我有以下算法(伪代码):

foreach vertex in S  {
  // Check that the vertex has enough edges
  if (vertex.edges.count < S.size - 1)
    return false;

  // Check that there is an edge to each vertex in S
  foreach vertex2 in S  {
    if (!vertex.hasEdgeTo(vertex2))
      return false;
  }
}
return true;
Run Code Online (Sandbox Code Playgroud)

问题是该算法的最坏情况性能是O(| V | 2)(在子集S包含完整图的所有顶点的情况下).

我的问题是:是否有更快的算法运行,具有更好的大O最坏情况复杂度?

algorithm optimization graph

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

检测是否可以从C++中派生类型

我有以下模板类和它的类型的(全局)变量:

template <typename ClassT>
struct ClassTester : public ClassT {
    typedef ClassT type;
};

ClassTester<int> *aaa;  // No error here
Run Code Online (Sandbox Code Playgroud)

我期望编译错误,因为int无法派生,但这在Visual C++ 2010下编译得很好.

如果我删除指针,我得到预期的编译错误(int无法派生):

ClassTester<int> bbb; // Error here
Run Code Online (Sandbox Code Playgroud)

我想使用这个类进行SFINAE测试,给定的类型是否可以派生自以下类:

template <typename T>
struct CanBeDerivedFrom  {

    template <typename C>
    static int test(ClassTester<T> *) { }

    template <typename>
    static char test(...) { }

    static const bool value = (sizeof(test<T>(0)) == sizeof(int));
};
Run Code Online (Sandbox Code Playgroud)

然而,即使对于原始类型,例如int由于上述原因,这仍然是正确的.这是C++的预期/有效行为吗?

c++ sfinae template-meta-programming

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