小编ura*_*ray的帖子


固定大小的结构类型数组

如何在C#中声明结构类型的固定大小数组:

[StructLayout(LayoutKind.Sequential,Pack=1), Serializable]
public unsafe struct MyStruct{
    ...
}

public class MyClass {
    ...
    public fixed MyStruct myStruct[256];
}
Run Code Online (Sandbox Code Playgroud)

这将导致CS1663:不允许使用结构类型的固定大小缓冲区,我该如何解决这个问题?我不喜欢使用C#或"托管集合数据结构"类型,因为我需要经常将其编译为本机C++

c# arrays struct unsafe marshalling

9
推荐指数
1
解决办法
9070
查看次数

float < - > std :: string转换替代?

没有任何替代品atof,strtod,lexical_cast,stringstreamsprintf

那是:

  1. 快速
  2. C++方式(std::string代替char*)
  3. 安全(没有缓冲区溢出风险)
  4. 有效(如果无法进行转换,则返回NaN)
  5. 没有外部库(独立)

我更喜欢这个,一个简单的功能,优化,并在一定程度上

原因:

  • atof并且strtod是C函数,它们不会NaN在失败时返回,我更喜欢继续工作std::string,所以我只是问是否有人已经写了一些std::string我可以使用的包装器(如果你不介意的话).
  • lexical_cast 有依赖性
  • stringstream 是慢的
  • sprintf 有缓冲区溢出风险及其C函数

c++ string floating-point stl

8
推荐指数
1
解决办法
3734
查看次数

C++重载变量参数的运算符逗号

是否可以通过重载参数的运算符逗号来为函数构造可变参数?我想看一个如何做的例子......,也许是这样的:

template <typename T> class ArgList {
public:
    ArgList(const T& a);
    ArgList<T>& operator,(const T& a,const T& b);
}
//declaration
void myFunction(ArgList<int> list);

//in use:
myFunction(1,2,3,4);

//or maybe:
myFunction(ArgList<int>(1),2,3,4);
Run Code Online (Sandbox Code Playgroud)

c++ arguments operators variadic comma-operator

7
推荐指数
1
解决办法
4608
查看次数

C++,使用模板编程的术语/习语

我一直在读这个词:

  1. 模板编程
  2. 通用编程
  3. 元编程
  4. 也许是另一个成语/术语..

对于任何使用模板的c ++代码,哪一个是正确的或更准确的术语?

c++ templates idioms term

7
推荐指数
1
解决办法
267
查看次数

使用任意类型的给定参数进行任意操作的任何建议?

基本上我只想使用任意类型的给定参数进行任意操作.

参数类型基类是Var,而Operation是将为给定参数执行的操作的基类.

我有Evaluator类,它包含使用opId映射的运算符集合.Evaluator将根据evaluate()成员函数中给出的opId参数进行操作,然后evaluate()函数将搜索将接受参数类型和opId的受支持运算符.

我想问的是,有没有有效的模式或算法可以在没有dynamic_cast <>和/或循环运算符集合的情况下执行此操作.

`

class Var {
public:
    bool isValidVar();
    static Var invalidVar();
}

template<typename T> class VarT : public Var {
public:
    virtual const T getValue() const;   
}

class Operator {
public:
    virtual Var evaluate(const Var& a, const Var& b) = 0;
}

template<typename T> class AddOperator : public Operator {
public:
    virtual Var evaluate(const Var& a, const Var& b)
    {                             //dynamic_cast is slow!
        const VarT<T>* varA = dynamic_cast<const VarT<T>*>(&a);
        const …
Run Code Online (Sandbox Code Playgroud)

c++ design-patterns dynamic-cast generic-programming

6
推荐指数
1
解决办法
352
查看次数

C++:纯虚拟赋值运算符

为什么如果我们在基类中有纯虚拟赋值运算符,那么我们在派生类上实现该运算符,它会在基类上给出链接器错误?

目前我在http://support.microsoft.com/kb/130486上只有以下说明,它说该行为是设计的,因为正常的继承规则不适用.

我不清楚,为什么它会通过设计产生链接器错误?有人可以给我更明确的解释吗?

编辑:添加了我发生错误的简化代码:

class __declspec(dllexport) BaseClass {
public:
    int memberA;
    virtual BaseClass& operator=(const BaseClass& rhs) = 0;
};

class __declspec(dllexport) DerivedClass : public BaseClass {
public:
    int memberB;
    DerivedClass():memberB(0) {}
    virtual BaseClass& operator=(const BaseClass& rhs) {
        this->memberA = rhs.memberA;
        this->memberB = 1;
        return *this;
    }
};

int main(void)
{
    DerivedClass d1;
    DerivedClass d2;

    BaseClass* bd1 = &d1;
    BaseClass* bd2 = &d2;

    *bd1 = *bd2;
}
Run Code Online (Sandbox Code Playgroud)

如果没有 __declspec(dllexport)和/或没有基类上的纯虚拟运算符=声明,代码将编译时没有错误.

在没有__declspec(dllexport) …

c++ linker-errors pure-virtual operator-keyword

6
推荐指数
2
解决办法
4192
查看次数

是否仍然虚拟调用指向虚函数的指针?

指向虚拟的类成员函数的函数指针是否有效?

class A {
public:
    virtual void function(int param){ ... };
}

class B : public A {
    virtual void function(int param){ ... }; 
}

//impl :
B b;
A* a = (A*)&b;

typedef void (A::*FP)(int param);
FP funcPtr = &A::function;
(a->*(funcPtr))(1234);
Run Code Online (Sandbox Code Playgroud)

B::function被称为?

c++ virtual function-pointers function

6
推荐指数
2
解决办法
200
查看次数

C++函数指针作为默认模板参数

如何将函数指针编写为默认模板参数,我猜这样写:

template<typename R,
         typename A,
         typename F=R (*PF)(A)> 
class FunctionPtr { ...
Run Code Online (Sandbox Code Playgroud)

我的问题是,

1.有可能吗?

2.如果是,我上面的猜测代码是正确的,PF这里的目的是什么?我需要这个吗?

c++ templates arguments default function-pointers

6
推荐指数
1
解决办法
1029
查看次数

访问前n个可变参数函数参数

我有以下代码:

template<size_t sz,typename T=float> class Vec{
    T v[sz];    
    Vec(const T& val,const T&... nv){
        //how do i assign `sz` number of first arguments into `this->v` array
    }
}
Run Code Online (Sandbox Code Playgroud)

我想创建构造函数,接收通用数量的构造函数参数,并将第一个sz参数数分配给成员变量v

我想做的是能够做到这样: Vec<3> var(1.0,2.0,3.0);

c++ templates constructor variadic-templates c++11

6
推荐指数
1
解决办法
461
查看次数