我有以下内容:
Struct A {
char a;
char b[10];
int c;
float d;
}
Struct B {
float d;
char b[10];
char a;
int c;
bool e;
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个接受结构A或B的泛型函数来访问以下元素:
void SetD(A a, float f) { a.d = f; }
Run Code Online (Sandbox Code Playgroud)
将有许多不同的结构(大多数具有相同的元素)和许多功能来操作它们.
我正在尝试概括访问权限,因此我不必将每个方法复制到每个Struct中,从而导致重复的代码.不确定instanceof或模板在这里是否最好.关于如何优雅地实现这一点的任何想法?如果我能提供更多说明,请告诉我.
字符串的平均长度为4个字符.我认为二进制搜索可能是从第4位开始最快的.另外我认为内联模板化函数可能表现良好.这是在一个非常紧凑的循环中完成的,因此性能至关重要.
数据看起来像:
"1234 "
"ABC "
"A1235 "
"A1235kgo"
Run Code Online (Sandbox Code Playgroud) 字符串是固定长度8,包含字母数字字符和右边填充空格.
也就是说,
"STRING1 "
"STR2 "
"S "
Run Code Online (Sandbox Code Playgroud)
等等..
我在想这memcmp可能是最快的吗?
我有一堆结构,如:
struct A { ... }
struct B { ... }
struct C { ... }
Run Code Online (Sandbox Code Playgroud)
我想设计一个函数,它可以接受这些结构的数组并遍历数组的每个元素并调用另一个函数,如:
template <typename T>
ostream& process(ostream& os, const T* array) {
// output each element of array to os (but how do we know the length?)
}
A a_array[10];
process(a_array);
Run Code Online (Sandbox Code Playgroud)
我无法显式传递数组的大小,因为进程函数实际上是operator <<()(我只是用于演示目的的进程)
更新:我不能在这里使用任何std容器.不幸的是,它必须是一个阵列!
我有像这样的数组:
template<class T> class F
{
...
bool isSet() { return set_; }
T& GetVal() { return val_; }
private:
T val_;
bool set_;
...
}
F<S1> arr1[10];
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个迭代器(或类似迭代器的类)来简化以下内容:
F<S1>* cur = arr1[0];
while(cur.IsSet())
{
S1* ptr = cur->GetVal();
// do something with ptr
cur++;
};
Run Code Online (Sandbox Code Playgroud)
想要更清洁的东西可以使用不同类型的S1,S2等.
假设我有以下内容:
#pragma pack(push,1)
struct HDR {
unsigned short msgType;
unsigned short msgLen;
};
struct Msg1 {
unsigned short msgType;
unsigned short msgLen;
char text[20];
};
struct Msg2 {
unsigned short msgType;
unsigned short msgLen;
uint32_t c1;
uint32_t c2;
};
.
.
.
Run Code Online (Sandbox Code Playgroud)
我希望能够重用HDR结构,所以我不必继续定义两个成员:msgType和msgLen.我不想出于性能原因而涉及vtable,但我确实想要为每个结构覆盖operator <<.基于这最后一个要求,我不知道我怎么可能使用联合,因为大小也不同.
关于如何最好地处理纯粹性能的任何想法
我有一个类似的结构
template<typename T>
struct S
{
T value;
void Set(const T& val) { value = val; }
void Foo();
}
Run Code Online (Sandbox Code Playgroud)
T可以是int,float,char,short和long long,也可以是N个其他基于struct的POD之一.
有大约50个左右的POD,它们看起来像:
struct POD1 { int i; char c; double d; }
struct POD2 { char c; double d; }
struct POD3 { POD1 p1; char s[10]; }
Run Code Online (Sandbox Code Playgroud)
我想知道如何最好地构建这种安排.如果我想要通用T案例来处理POD,我是否需要提供int,float,char,short和long long案例的明确,具体的定义?
先感谢您.
我有一个perl脚本接受一个很长的选项--pager='less -R',我只想将它缩短为-p.这是一个快速入侵,我不知道perl,我假设最直接的方法是在-pager ='less -R'之前搜索和替换ARGV数组中的-p(或perl中调用的任何东西)它开始处理命令行参数.