我正在尝试创建一个可变大小的颜色类 - 给定模板确定的值数组,我想为数组中的每个值创建命名别名,即:
template<int C = 3, typename T = unsigned char>
class Color {
public:
union {
T v[C];
struct {
T r, g, b, a;
};
};
};
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试为C = 3使用相同的类,则union要求4字节的大小('a'成员).或者,使用数学表达的位域大小((名为a,anonymous T成员的结构,大小在C> 3时评估为1),编译器发出一个允许警告(不可抑制,根据In gcc,如何静音 -敏感警告?),不适合大规模API的东西.
我如何允许单个类处理不同数量的变量,同时保留每个变量名称而不实现递归包含宏魔法(试过这个,不应该).提前致谢!
编辑:为了澄清问题,以下任何一个答案将解决此问题:
如果我有一个带有两个变量x和y的简单类,以及一个返回带有数据的格式化字符串的函数ToString().我打电话的时候
cout << simpleClass << "\n";
Run Code Online (Sandbox Code Playgroud)
有谁知道我可以让simpleClass.ToString自动调用以返回格式正确的字符串?我猜测有一种方法可以用操作符函数来完成,但我不知道怎么做.
给定深度预先渲染渲染器,我有一个给定片段可能包含的最小深度值 - 因此,考虑任何比表示更远的片段是没有意义的.
现在,我有一个写入的着色器gl_FragDepth,但是保证写入一个大于或等于其多边形面深度值的值.我怎样才能执行深度预测试(即,如果片段深度比缓冲区值更远,在没有着色器执行的情况下丢弃),但是如果它通过预先设置,则允许我写出与插值面深度不同(更大)的值测试?
这似乎是一个相当简单的问题(或至少尽可能接近).当我传递GL_RGB8,GL_RGBA8或大多数任何多通道内部格式时,下面的行不会产生错误.
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, fontImgSize, fontImgSize, 0, GL_RED, GL_UNSIGNED_BYTE, NULL);
Run Code Online (Sandbox Code Playgroud)
但是,当我传递GL_R8或任何8位单通道变量时,glGetError返回0x501(无效值).
glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, fontImgSize, fontImgSize, 0, GL_RED, GL_UNSIGNED_BYTE, NULL);
Run Code Online (Sandbox Code Playgroud)
知道这里发生了什么吗?我目前使用的计算机是相当过时和低功耗的,但如果这是问题我怀疑RGB8或RGBA8会工作.
对于那些好奇的,fontImgSize == 2048,我的计算机上的最大纹理大小.
编辑:看起来GL_RG8和2通道/ 16位格式也产生0x501
给出了两个函数,就像这样
inline V2T<Int16> GS(float x, float y, int xOff, int yOff, Uint8 f = 0x00);
inline V2T<Int16> GS(float x, float y, int xOff, int yOff, int maxW = -1, int maxH = -1, Uint8 f = 0x00);
Run Code Online (Sandbox Code Playgroud)
对于像GS(float,float,int,int)这样的情况,重载明显不明确
有没有办法为这样的情况指定默认重载?不必与GNU C++编译器兼容,因为我已经使用了几个独特的约定.理想情况下,像
inline V2T<Int16> GS(... , Uint8 f = 0x00) __default;
inline V2T<Int16> GS(... , int maxW = -1, int maxH = -1, Uint8 f = 0x00);
Run Code Online (Sandbox Code Playgroud)
导致编译器自动解析以支持第一个(__default)函数.
我所看到的所有问题都是针对新手第一次遇到这个错误,因此有可能这已被回答但被埋没了.提前致谢!
即将到来的项目我有一个独特的问题; 我需要一种算法,它可以从变量中获取非明文数据并尽快解密.但是,我在尽可能松散的意义上使用解密,因为我正在寻找的是一种简单,优化的算法,其中唯一的目标是快速解密.解密所述字符串的复杂性/难度并不重要; 出于这些目的,将其所有字符移位一位的字符串将与AES实现一样有效.我知道我可以简单地遍历"加密"字符串并移动所有字符,但我很好奇是否有更快的方法来实现这一点.我正在考虑缓存,但我不确定这个脚本是否能够写入文件,因此这很复杂.此外,请注意,我将无法安装插件/扩展(甚至不是PECL),所以这必须纯粹是PHP.
我在NASM文档中遇到了以下说明,但我无法完全了解它们.可悲的是,英特尔关于这些说明的文档也有些缺乏.
PREFETCHNTA m8 ; 0F 18 /0 [KATMAI]
PREFETCHT0 m8 ; 0F 18 /1 [KATMAI]
PREFETCHT1 m8 ; 0F 18 /2 [KATMAI]
PREFETCHT2 m8 ; 0F 18 /3 [KATMAI]
Run Code Online (Sandbox Code Playgroud)
任何人都可以提供一个简明的指令示例,比如在给定地址缓存256个字节吗?提前致谢!
我之前已经看过基于mono的语言,但我很好奇这是否可以在c ++中实现.如果我有以下课程
class test {
public:
int foo;
int myfunction();
};
Run Code Online (Sandbox Code Playgroud)
当我尝试访问foo变量时,我是否可以通过任何方式调用myfunction并返回其值?
test t;
cout << t.foo;//instead of printing the value of foo, print the return value of myfunction
Run Code Online (Sandbox Code Playgroud)
提前致谢!我用谷歌搜索了这个,但是找不到任何东西.
或者,如果没有括号,可以调用没有参数的函数吗?
哇!感谢所有输入人员.我不想要括号的主要原因是我试图使这个API与旧的非c ++ API类似.在这个类中的函数之后没有两个括号可能会使维护变得更难,但它将节省我几个小时来回答为什么Vector2.normalized必须在它之后有().
c++ ×5
opengl ×2
assembly ×1
bit-fields ×1
c ×1
class ×1
cout ×1
encryption ×1
g++ ×1
intel-syntax ×1
nasm ×1
optimization ×1
overloading ×1
php ×1
rendering ×1
texturing ×1
unions ×1