我有一个宏,其中一个参数是一个枚举值,在没有指定命名空间范围的情况下给出.但是在宏内部我需要访问它(显然我必须在那里定义命名空间),但我似乎无法使用模板参数连接命名空间名称.给定以下示例代码,编译器会抱怨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++的新手,如果这是插入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的方式有效吗?我宁愿这样做......
例如,我想简化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)
由于构造函数不是继承的.
有没有解决这个问题的模式?
我用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)没有任何转换.
我正在做一些元编程,现在我需要测试一个给定类型的成员函数是否可以使用给定的参数集来调用,所以我做了类似下面的事情(通过删除一些不重要的东西大大简化了这个特殊的问题当然):
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,以防有可能和什么不可能.
如何每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)
我不知道怎么样,请帮帮我们
我所知.CUDA上的常量内存是特定内存.它比全局内存更快.但是在OpenCL的规范中.我得到以下的话.
该
__constant或常量地址空间名称是用来描述全局内存分配的变量,这是一个内核(S)作为只读变量访问内部
所以__constant内存来自__global内存.这是否意味着它与__global内存具有相同的访问性能?
我是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'
我怎样才能使它工作?
我只是在想,当我们使用会发生什么free()用newC++编写.
如果我们使用free(),new那么可以释放内存.它只是析构函数不会被调用.离开行为就像悬挂指针一样.
我明白上面我们不应该使用它free(),new因为它可能会破坏堆.
但是,我还希望在概念上可视化行为.
我编写了一个解析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))是所需的尺寸.此行会导致访问冲突.有谁知道如何正确分配内存?
提前致谢 :)