我发现以下代码被Visual C++ 2008和GCC 4.3编译器接受:
void foo()
{
}
void bar()
{
return foo();
}
Run Code Online (Sandbox Code Playgroud)
它编译时我有点惊讶.这是语言功能还是编译器中的错误?C/C++标准对此有何看法?
我目前有以下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列表是一个双向链表,所以从我的角度来看,应该可以做到这一点.
建议吗?提前致谢
我目前正在使用Shader Model 4(DirectX 10 HLSL)实现3D Perlin噪声凹凸贴图.生成噪声本身并不是一个大问题(有大量的教程和代码),但我没有找到3D Perlin噪声的分析衍生物.
考虑到衍生品的唯一网站是Ignigo Quilez的网站和相关的GameDev.net讨论.问题是在第一个链接中噪声是基于值的,而不是基于梯度的(这是我的要求),在第二个链接中,只有2D梯度噪声导数.
请注意,我不是在寻找数值导数,因为那些需要生成4个相邻的噪声样本,而且开销太多了.
有人计算过这些衍生物吗?是否有使用它们的参考实现?
我目前正在重新触摸游戏的用户界面(即OpenLieroX).我正在寻找一个允许轻松创建GUI的库/框架.具体来说,这些是我的要求:
我已经尝试过这些库:
如果有人知道一个可以满足这些需求的框架,我将非常感激.感谢您的输入.
我正在使用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中其他本机库的本机库?
考虑我有这样的函数声明:
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可以做到这一点.但是,我对如何实施的原则感兴趣.
我有一个无向无加权图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最坏情况复杂度?
我有以下模板类和它的类型的(全局)变量:
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++ ×5
3d ×1
algorithm ×1
c ×1
derivative ×1
function ×1
graph ×1
java ×1
linked-list ×1
optimization ×1
perlin-noise ×1
sfinae ×1
stl ×1
tuples ×1