鉴于HFONT,我如何判断它是否为符号字体?我正在使用的pdf库需要以不同的方式处理符号字体,所以我需要一种方法来以编程方式判断任何给定的字体是否是符号字体.
我想在派生类的私有基类中创建一个公共成员,如下所示:
class A {
public:
int x;
int y;
};
class B : public A {
// x is still public
private:
// y is now private
using y;
};
Run Code Online (Sandbox Code Playgroud)
但显然"使用"不能以这种方式使用.有没有办法在C++中这样做?
(我不能使用私有继承,因为A的其他成员和函数必须仍然是公共的.)
我正在使用Visual Studio 2005 nmake,我有一个像这样的测试makefile:
sometarget:
-mkdir c:\testdir
Run Code Online (Sandbox Code Playgroud)
我想始终创建目录,而不必指定'sometarget'.例如,我可以这样做:
!if [if not exist c:\testdir\$(null) mkdir c:\testdir]
!endif
Run Code Online (Sandbox Code Playgroud)
但这需要两行,我真的只想做"-mkdir c:\ testdir".如果我只用"-mkdir c:\ testdir"替换它我从nmake得到一个错误 - "致命错误U1034:语法错误:分隔符丢失".
我怎么能总是执行mkdir,而不是搞乱!if []的东西?
根据技术说明2123,在xcode中,您可以使用"dsym"调试信息构建可执行文件,该调试信息将调试信息放在单独的文件中(而不是将其嵌入可执行文件中).我们正在从命令行构建我们的应用程序,而不是直接使用xcode - 有没有办法告诉clang在命令行上执行此操作?
我有一个大型项目,我想开始使用visual studio 2005进行编辑.我想告诉它"这是我想要你跟踪的所有文件,现在继续使用它"并将它们显示为目录树,例如:
Folder 1
- File A
- File B
- File C
Folder 2
- Folder 3
- File X
- File Y
- File D
- File E
Run Code Online (Sandbox Code Playgroud)
现在它只显示一个大列表中的所有头文件,以及一个大列表中的所有源文件,我发现这些文件无益.我也不想花费多少时间在项目中为磁盘上的每个文件夹创建一个文件夹.
有什么方法可以让VS向我展示解决方案中所有内容的源代码树,按照它在实际磁盘上的位置进行组织?
谢谢.
我一直在努力追查铿锵声中的一个错误,我认为我对它的再现相当微小.这是我的计划:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define x_Is_Digit(x) isdigit((unsigned char) (x))
void Odd_Behavior(char * version)
{
char * ptr, *tmp;
for (ptr = version; x_Is_Digit(*ptr); ptr++);
ptr++;
for (tmp = ptr; x_Is_Digit(*ptr); ptr++);
if (ptr == tmp)
printf("%08x == %08x! Really?\n", ptr, tmp);
}
int main()
{
char buffer[100];
strcpy(buffer, "3.8a");
Odd_Behavior(buffer);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
当我用优化编译它时,在Xcode下载包含的clang("Apple clang 2.1")中:
clang++ -Os optimizebug.cpp
Run Code Online (Sandbox Code Playgroud)
然后运行它报告:
6b6f2be3 == 6b6f2be2! Really?
Run Code Online (Sandbox Code Playgroud)
至少可以说,这让我觉得有些奇怪.如果我删除x_Is_Digit中的(unsigned char)强制转换,它可以正常工作.
我是否遇到过clang中的错误?或者我在这里做了什么导致某种未定义的行为?如果我用-O0编译它,我不会遇到问题.
这是我现在正在使用的一些代码的简化版本:
int Do_A_Thing(void)
{
return(42);
}
void Some_Function(void)
{
int (*fn_do_thing)(void) = Do_A_Thing;
fn_do_thing();
}
Run Code Online (Sandbox Code Playgroud)
当我在 xcode 4.1 中编译它时,它生成的汇编程序会像这样设置 fn_do_thing 变量:
0x2006: calll 0x200b ;
0x200b: popl %eax ; get EIP
0x200c: movl 1333(%eax), %eax
Run Code Online (Sandbox Code Playgroud)
即它为找到Do_A_Thing函数的地方生成一个相对地址——“当前指令加1333”,根据映射文件,它是一个指向函数的“非惰性指针”。
当我使用 Visual Studio 在 Windows 上编译类似的代码时,Windows 会生成一个固定地址,而不是像这样相对地这样做。例如,如果 Do_A_Thing 位于 0x40050914,它只会将 fn_do_thing 设置为 0x40050914。相比之下,xcode 将其设置为“我所在的位置 + 一些偏移量”。
有没有办法让xcode生成一个绝对地址来设置函数指针,就像visual studio一样?或者有什么原因不起作用?我注意到每次运行程序时,Do_A_Thing 函数(和所有其他函数)似乎都加载到不同的地址。
我有一个模板类C_Foo <T>,它有很多种方法.
struct Bar_Base { ... };
struct Bar_1 : public Bar_Base { ... };
struct Bar_2 : public Bar_Base { ... };
struct Bar_3 : public Bar_Base { ... };
class C_Foo<T> { ... };
class C_Foo_1 : public C_Foo<Bar_1> { ... };
class C_Foo_2 : public C_Foo<Bar_2> { ... };
class C_Foo_3 : public C_Foo<Bar_3> { ... };
Run Code Online (Sandbox Code Playgroud)
实例化如下:
C_Foo_1 foo1;
C_Foo_2 foo2;
C_Foo_3 foo3;
Run Code Online (Sandbox Code Playgroud)
我有一组常见的操作,所有操作都是在C_Foo上定义的,我想在foo1,foo2和foo3上执行.我尝试过以下方法:
vector<C_Foo *> v;
v.push_back(&foo1);
v.push_back(&foo2);
v.push_back(&foo3);
Run Code Online (Sandbox Code Playgroud)
但是我得到编译错误,大概是因为编译器不确定如何从C_Foo_1转到C_Foo.
可以这样做吗?我希望能够循环遍历foo1 ... fooN并对所有这些操作执行相同的操作,而不必像这样复制和粘贴样板代码:
foo1.do_stuff();
foo2.do_stuff(); …Run Code Online (Sandbox Code Playgroud) 假设我有一个有工会成员的班级:
class ClassX {
public:
union {
StructA * A;
StructB * B;
};
}
Run Code Online (Sandbox Code Playgroud)
如果我将指针x1和x2指向不同的ClassX对象,请执行以下操作:
x1->A = x2->A;
Run Code Online (Sandbox Code Playgroud)
与此具有相同的效果:
x1->B = x2->B;
Run Code Online (Sandbox Code Playgroud)
?谢谢.
我们的时间紧迫,所以我们计划首先发布我们的iOS 6支持应用程序,然后在未来的更新中添加对iOS 5的支持.(我们希望支持iPad 1,它仍然拥有相当大的一块市场,并不能使用iOS 6.)
这是可行的,对吗?在您发布应用程序后,无法减少iOS应用程序所需的iOS版本没有一些限制吗?我认为我需要做的就是改变我的应用程序在Xcode中所需的iOS版本,但我想检查以确保.
谢谢!