小编Gri*_*zly的帖子

带命名空间的Concat宏参数

我有一个宏,其中一个参数是一个枚举值,在没有指定命名空间范围的情况下给出.但是在宏内部我需要访问它(显然我必须在那里定义命名空间),但我似乎无法使用模板参数连接命名空间名称.给定以下示例代码,编译器会抱怨pasting :: and Val doesnt give a valid preprocessor token(它可以很好地将get和a连接到getVal).

 namespace TN
 {
    enum Info
    {
        Val = 0
    };
 }

#define TEST(a) TN::Info get ## a(){return TN::##a;}
TEST(Val)
Run Code Online (Sandbox Code Playgroud)

那么有没有办法让这项工作不使用另一个参数,并基本上指定要使用两次的值(例如#define TEST(a,b) TN::Info get ## a(){return b;})?

c++ c-preprocessor

5
推荐指数
1
解决办法
2744
查看次数

通过赋值运算符在索引处插入std :: vector

我是C++的新手,如果这是插入std :: vector的首选方式,我很好奇

std::vector<Object_I_madeup> myVector;

   void setAt(int x, Object_I_madeup o)
        {
            myVector[x] = o;

        } // set the array location at x  to be o.
Run Code Online (Sandbox Code Playgroud)

我问,因为我看到很多关于使用的事情push_back,或者是非常令人困惑的事情insert().这种类似Java的方式有效吗?我宁愿这样做......

c++ stdvector

5
推荐指数
1
解决办法
1万
查看次数

如何简化复杂的模板声明

例如,我想简化std::tr1::shared_pointer模板类.我想要一个别名std::tr1::shared_pointer.

但这不起作用:

#include <tr1/memory>

template <class T>
class SharedPointer : public std::tr1::shared_ptr<T>
{
};

int main(int argc, char *argv[])
{
    SharedPointer<int> test(new int(5));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

由于构造函数不是继承的.

有没有解决这个问题的模式?

c++ c++11

4
推荐指数
2
解决办法
334
查看次数

将"unsigned char"传递给期望char或const char*的重载函数会导致歧义

我用a QByteArray来存储原始二进制数据.为了存储数据,我使用了QByteArray追加函数.

我喜欢使用无符号字符来表示字节,因为我认为255它更容易解释-1.但是,当我尝试将零值字节附加到a时QByteArray,如下所示:

command.append( (unsigned char) 0x00));
Run Code Online (Sandbox Code Playgroud)

编译器抱怨call of overloaded append(unsigned char) is ambiguous.据我所知,这是因为零可以解释为空指针,但为什么编译器不将unsigned char视为char,而不是想知道它是否是一个const char*?当然,我会理解编译器是否抱怨command.append(0)没有任何转换.

c++ qt

4
推荐指数
1
解决办法
965
查看次数

从c ++ 11模板参数包创建空指针

我正在做一些元编程,现在我需要测试一个给定类型的成员函数是否可以使用给定的参数集来调用,所以我做了类似下面的事情(通过删除一些不重要的东西大大简化了这个特殊的问题当然):

template<typename T, typename... Args>
struct argument_tester {
    struct base: public T { 
        using T::my_member; 
        no my_member(...){}
    };
    typedef decltype(static_cast<base*>(0)->my_member(*static_cast<Args*...>(0))) type;
    //verify return type
};
Run Code Online (Sandbox Code Playgroud)

当然它不起作用*static_cast<Args*...>(0),所以我的问题是是否有任何方法可以将参数包解压缩为解除引用的空指针,或者如果这是我必须专门针对每个参数数量的情况.当然,如果我有办法怎么做呢?我正在使用gcc 4.6,以防有可能和什么不可能.

c++ templates metaprogramming c++11

3
推荐指数
1
解决办法
356
查看次数

每10秒循环一次

如何每10秒加载一个循环并为计数添加+1并打印它?

喜欢:

int count;
    while(true)
    {
       count +=1;
       cout << count << endl; // print every 10 second 
    }
Run Code Online (Sandbox Code Playgroud)

打印:

1
2
3
4
5
ect...
Run Code Online (Sandbox Code Playgroud)

我不知道怎么样,请帮帮我们

c++

3
推荐指数
1
解决办法
5万
查看次数

__constant内存的访问性能是否与OpenCL上的__global内存相同

我所知.CUDA上的常量内存是特定内存.它比全局内存更快.但是在OpenCL的规范中.我得到以下的话.

__constant或常量地址空间名称是用来描述全局内存分配的变量,这是一个内核(S)作为只读变量访问内部

所以__constant内存来自__global内存.这是否意味着它与__global内存具有相同的访问性能?

opencl

3
推荐指数
1
解决办法
924
查看次数

cpp在声明之前运行的函数?

我是CPP的新手,我想知道如何运行不在其范围内的函数.我习惯在javascript中做这些事情,当我尝试这样做时,我得到一个错误的CPP.我的意思是以下内容:

#include <iostream>

using namespace std;
int tic_h;
int tic_v;
void echo(string e_val){
   cout << e_val;
}
void c_mes(){
  echo("X|0|X\n");
  echo("-----\n");
  echo("X|0|X\n");
  echo("-----\n");
  echo("X|0|X\n");
  s_v();
}
void s_v(){
  echo("Please enter vertical coordinate: ");
  cin >> tic_v;
  if(tic_v<4&&tic_v>0){
    c_mes();
  }else{
    s_v();
  }
}
void s_h(){
  echo("Please enter horizontal coordinate: ");
  cin >> tic_h;
  if(tic_h<4&&tic_h>0){
    s_v();
  }else{
    s_h();
  }
}

int main(){
  s_h();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

错误:第16行未在此范围内声明'sv'

我怎样才能使它工作?

c++

2
推荐指数
1
解决办法
137
查看次数

我们在C++中有一个悬空对象的概念吗?

我只是在想,当我们使用会发生什么free()newC++编写.

如果我们使用free(),new那么可以释放内存.它只是析构函数不会被调用.离开行为就像悬挂指针一样.

我明白上面我们不应该使用它free(),new因为它可能会破坏堆.

但是,我还希望在概念上可视化行为.

c++ free new-operator

2
推荐指数
1
解决办法
264
查看次数

如何使用malloc正确引用结构内的双指针

我编写了一个解析url并将其拆分为组件的函数.为了存储URL的组件,我将指针(到函数)传递给以下称为urlinfo的结构:

typedef struct urlstruct {
    char** protocol;
    char** address;
    char** port;
    char** page;
} urlstruct;
Run Code Online (Sandbox Code Playgroud)

包含双指针的原因是因为我不知道URL的每个组件有多长.在函数内部,我计算出存储每个组件所需的大小,并尝试使用以下行将内存分配给urlstruct的组件:

*(urlinfo->protocol) = (char*)malloc(i * sizeof(char));
Run Code Online (Sandbox Code Playgroud)

哪里(i * sizeof(char))是所需的尺寸.此行会导致访问冲突.有谁知道如何正确分配内存?

提前致谢 :)

c++ malloc struct pointers

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