我正在寻找一种语法来从辅助存储设备而不是从默认堆分配内存.
我该如何实现它?malloc()默认情况下使用将它从堆中取出...当然必须有另一种方法!
而不是做
#include "MyClass.cpp"
Run Code Online (Sandbox Code Playgroud)
我想要做
#include "MyClass.h"
Run Code Online (Sandbox Code Playgroud)
我在网上看到,不这样做被认为是不好的做法.
我有一个对象列表.我需要这些对象的所有可能的排列.
在C++中,有std::next_permutation().我一直试图在.NET Framework中找到一些东西,但是干涸了.
我错过了什么?
我想知道如果它是更快地具有std::vector<std::vector<double>>其中嵌套矢量总是有2个元素,或者是它更快地具有std::vector<MyPoint>其中MyPoint就像定义:
struct MyPoint {
double Point[2];
};
Run Code Online (Sandbox Code Playgroud)
谢谢
如何void *something在标准C++中转换为对象?具体来说我想要投射void *userdata
到std::map<String, void*>
这可能吗?我在尝试:
//void *user_data is a parameter of this function (callback)
std::map <String, void*> user_data_n; //this line is ok
user_data_n = static_cast<std::map<String, void *>>(*user_data); //I get the errors here.
Run Code Online (Sandbox Code Playgroud)
错误:
Spurious '>>' user '>' to terminate a template argument list
Expected '>' before '(' token
'void *' is not a pointer-to-object type
Run Code Online (Sandbox Code Playgroud)
或者是否有更好的方法来传递有关调用者对象的信息以及我可以传递给的其他一些参数void *user_data?
更新:
@aaa carp建议的屁股改为>>,> >前两个错误得到了解决.最后是奇怪,为什么我在这里,而不是铸造它时,把该对象时设置回调时得到这样的消息?
std::map<String, void*> user_data_h;
user_data_h["Object"] = this; //this is …Run Code Online (Sandbox Code Playgroud) class A {
public:
template<typename T> void func(size_t n, T values[]) { ... }
};
class B : public A {
public:
void func(size_t n, uint32_t values[]) { ... }
};
Run Code Online (Sandbox Code Playgroud)
调用此代码时,为什么函数B::func() 不优先于函数模板A::func()?
uint32_t values[5];
A* obj = new B();
obj->func(5, values);
Run Code Online (Sandbox Code Playgroud) 我想为所有枚举定义一个运算符<< <<,然后cout该值并打印它是这样的枚举:
码:
enum AnyEnum{A,B,C};
AnyEnum enm = A;
cout << enm <<endl;
Run Code Online (Sandbox Code Playgroud)
输出:
This is an enum which has a value equal to 0
Run Code Online (Sandbox Code Playgroud)
通过使用is_enum结构,我知道使用Boost库执行此操作的方法.但我不明白它是如何工作的.所以这就是为什么,一般来说,我感兴趣的是如何识别veriable是类类型,联合类型还是枚举(在编译时).
我想把昨天的日期变成一个格式的字符:YYYYMMDD(没有斜点等).
我使用此代码来获取今天的日期:
time_t now;
struct tm *ts;
char yearchar[80];
now = time(NULL);
ts = localtime(&now);
strftime(yearchar, sizeof(yearchar), "%Y%m%d", ts);
Run Code Online (Sandbox Code Playgroud)
我将如何调整此代码,以便生成昨天的日期而不是今天的日期?
非常感谢.
我是C++的新手,我来自Java/C#.
我知道在Java和C#中你可以创建一个类,让另一个类继承它,并覆盖它的功能.然后,您可以创建父类的列表,并将子类的对象插入此列表中.之后,您可以使用被覆盖的功能.
例:
public class Parent
{
public virtual void test()
{
Console.WriteLine("test");
}
}
public class Child : Parent
{
public override void test()
{
Console.WriteLine("test2");
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
List<Parent> tests = new List<Parent>();
tests.Add(new Child());
tests[0].test();
Run Code Online (Sandbox Code Playgroud)
输出:
Run Code Online (Sandbox Code Playgroud)test2
在C++中,当我这样做时std::vector,它调用父的成员函数,而不是子函数.
如何在C++中完成上述操作?
我有一个traits类,它应该只提供一个关于其他类型的信息(以字符串的形式):
template<typename T>
struct some_traits {
static const char* const some_string;
};
Run Code Online (Sandbox Code Playgroud)
我需要some_string为每种类型提供特殊实例.我知道如何执行此操作的常用方法是仅声明some_traits,然后编写特化:
template<typename T>
struct some_traits;
template<>
struct some_traits<blah> {
static const char* const some_string;
};
const char* const some_traits<blah>::some_string = "blah string";
Run Code Online (Sandbox Code Playgroud)
然而,当我需要的只是一个专门的代码时,这是很多代码some_string.有没有办法简化这个?
我试图摆弄明确的特化,但未能提出一种语法,不会让编译器向我的脸部吐出有毒的错误信息.
笔记: