我最近遇到了这样的情况:
class A
{
public:
typedef struct/class {...} B;
...
C::D *someField;
}
class C
{
public:
typedef struct/class {...} D;
...
A::B *someField;
}
Run Code Online (Sandbox Code Playgroud)
通常你可以声明一个类名:
class A;
Run Code Online (Sandbox Code Playgroud)
但是你不能转发声明一个嵌套类型,以下导致编译错误.
class C::D;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我们有一些生产中没有人关心的构建系统,这些机器运行古老版本的GCC,如GCC 3或GCC 2.
而且我无法说服管理层将其升级到更近期:他们说,"如果没有破产,就不要修理它".
由于我们维护了一个非常古老的代码库(写于80年代),这个C89代码在这些编译器上编译得很好.
但我不确定使用这些旧东西是个好主意.
我的问题是:
可以使用旧的C编译器破坏编译程序的安全性吗?
更新:
相同的代码是由Visual Studio 2008 for Windows目标构建的,而MSVC还不支持C99或C11(我不知道更新的MSVC是否支持),我可以使用最新的GCC在我的Linux机器上构建它.因此,如果我们只是放入一个较新的GCC,它可能会像以前一样好.
我有一个定位的div,其内容可能太长,所以滚动条出现(overflow:auto
设置).它在ajax应用程序中用作对话框.我想在它的右上角修复一个关闭按钮,所以当用户滚动div时它不会滚动.
我尝试了它,position:fixed; right:0; top:0
但它把按钮放在页面的右上方而不是div(在firefox中).
是否可以使用CSS进行此按钮放置而不会在每次滚动事件中使用js中的offsetWidth/Height进行黑客攻击?
ps:div的高度和宽度不是固定值,它取决于内容的大小和浏览器窗口的大小.用户也可以根据需要调整大小.
在一个C++开源项目中,我看到了这一点.
struct SomeClass {
...
size_t data_length;
char data[1];
...
}
Run Code Online (Sandbox Code Playgroud)
这样做有什么好处而不是使用指针?
struct SomeClass {
...
size_t data_length;
char* data;
...
}
Run Code Online (Sandbox Code Playgroud)
我唯一能想到的是使用size 1数组版本,用户不会看到NULL.还有别的事吗?
我正在开发一个包含许多运行超时和间隔的ajax web应用程序.现在我需要清除所有正在运行的超时和间隔.是否有一种简单的方法来阻止所有内容而无需存储每个超时和间隔ID并迭代它们并清除它们?
我std::map
喜欢这样的:
map<wstring,int> Scores;
Run Code Online (Sandbox Code Playgroud)
它存储球员的名字和分数.当有人获得分数时,我会这样做:
Scores[wstrPlayerName]++;
Run Code Online (Sandbox Code Playgroud)
当在用钥匙将地图元素没有wstrPlayerName
它会创建一个,但它的增量前初始化为零或为空,或者它未定义?
我应该每次在增量之前测试元素是否存在吗?
我只是想知道,因为我认为原始类型的东西在创建时总是未定义的.
如果我写的东西如下:
int i;
i++;
Run Code Online (Sandbox Code Playgroud)
编译器警告我,我是未定义的,当我运行程序时,它通常不为零.
我最近遇到了一个问题,似乎我需要一个'静态抽象'方法.我知道为什么这是不可能的,但我怎样才能解决这个限制?
例如,我有一个抽象类,它有一个描述字符串.由于此字符串对于所有实例都是通用的,因此它被标记为static,但我想要求从此类派生的所有类都提供它们自己的Description属性,因此我将其标记为abstract:
abstract class AbstractBase
{
...
public static abstract string Description{get;}
...
}
Run Code Online (Sandbox Code Playgroud)
它当然不会编译.我想过使用接口但接口可能不包含静态方法签名.
我应该简单地使它成为非静态的,并且总是得到一个实例来获取特定于类的信息吗?
有任何想法吗?
在SVG(和Canvas,Quartz,Postscript,...)中,变换矩阵影响路径坐标和线宽.有没有办法进行调整,以便线宽不受影响?也就是说,在下面的例子中,X和Y的比例是不同的,这使得正方形成为一个矩形,这是正常的,但它也使得两边的线条更宽.
<g transform="rotate(30) scale(5,1) ">
<rect x="10" y="10" width="20" height="20"
stroke="blue" fill="none" stroke-width="2"/>
</g>
Run Code Online (Sandbox Code Playgroud)
我可以看到这在许多情况下都很有用,但有没有办法选择退出呢?我想我想要一个单独的笔TM或者能够将笔设置为CTM转换为圆形的椭圆,但我没有看到类似的东西.
缺乏这一点,我想我不得告诉SVG关于我的CTM而是自己转换坐标,这意味着将基元转换rect
成它们的path
等价物.
如果你正在写游戏,你应该考虑作弊者以及如何防止他们作弊.
我不认为只有mmo多人游戏,还有单人游戏或"自制啤酒"p2p mp游戏.
当游戏完全基于服务器 - 客户端架构时,我认为这项工作几乎已经完成,但也有墙壁黑客或其他东西.
我做了自己的p2p游戏,一段时间后出现了骗子.他们只是使用作弊引擎并尝试过speedhacks和记忆黑客的scriptkiddies.
大多数speedhacks挂钩gettickcount.我通过以下简单的技巧来整理速度计算器.我只追踪time()-GetTickCount()
价值,如果差异发生变化就会有作弊行为.
可以通过在某处保留散列副本并始终移动它并始终通过随机值对其进行重新分类来整理内存损坏.不匹配导致崩溃.
要完全挑选Cheat Engine,只需检查:
if (OpenFileMapping(FILE_MAP_READ,false,'CEHYPERSCANSETTINGS')!=0)
{
// Cheat Engine runs.
}
Run Code Online (Sandbox Code Playgroud)
(朋友告诉我这个,我还没有测试过.)
这些技巧排除了最多的骗子.但是当然还有更多的作弊技巧.我打开了这个wiki,讨论了更多另外的作弊技巧以及避免它们的方法.
我在Windows上使用Code :: Blocks IDE和GCC/MinGW,我正在尝试构建一个wxWidgets应用程序,其中包含ca. 20k线和40个源模块.它构建非常慢.
编译C++模块持续2-5秒,链接持续2-3分钟.
它是一个可移植的代码,这段代码在Linux上编译速度非常快.我无法按照构建消息窗口...整个过程持续不到20秒.
我尝试了常见的调整(例如,预编译头,关闭优化等),但没有任何效果.
为什么这么慢?
c++ ×4
c ×2
abstract ×1
anti-cheat ×1
c# ×1
class ×1
codeblocks ×1
css ×1
dictionary ×1
gcc ×1
html ×1
javascript ×1
mingw ×1
nested ×1
performance ×1
positioning ×1
postscript ×1
security ×1
static ×1
stl ×1
stylesheet ×1
svg ×1