我已经看到这个术语的名称,但我真的不明白你如何在内存中打开文件.
我将文件写入临时位置的磁盘,但是当某个表单关闭时需要清理,而当它打开时我不能这样做.这个文件夹被清空是必须的.我想知道我是否在内存中打开文件而不是它会有所作为?
显然你不能将virtual修饰符与修饰符一起使用override.
virtual - 可以覆盖的方法
override - 一个覆盖其父类中同名方法的方法
这让我相信,如果我覆盖子类中的方法,如果该子项有子,则无法再次覆盖该方法.
并且可以肯定地说,如果你在方法声明中放入override,virtual你将在C#中得到一个编译错误.
但是我无法理解为什么我在下面编写的代码按照它的方式工作
using System;
public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("Drawing Object");
}
}
public class DrawDemo
{
public static int Main()
{
DrawingObject[] dObj = new DrawingObject[3];
dObj[0] = new DrawingObject();
dObj[1] = new Line();
dObj[2] = new LittleLine();
foreach (DrawingObject drawObj in dObj)
{
drawObj.Draw();
}
Console.Read();
return 0;
}
}
public class Line : DrawingObject
{
public override …Run Code Online (Sandbox Code Playgroud) 我想与您分享我在尝试使用Boost库(版本1.52.0)处理C++中XML元素的某些属性时遇到的问题.给出以下代码:
#define ATTR_SET ".<xmlattr>"
#define XML_PATH1 "./pets.xml"
#include <iostream>
#include <string>
#include <boost/foreach.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
using namespace std;
using namespace boost;
using namespace boost::property_tree;
const ptree& empty_ptree(){
static ptree t;
return t;
}
int main() {
ptree tree;
read_xml(XML_PATH1, tree);
const ptree & formats = tree.get_child("pets", empty_ptree());
BOOST_FOREACH(const ptree::value_type & f, formats){
string at = f.first + ATTR_SET;
const ptree & attributes = formats.get_child(at, empty_ptree());
cout << "Extracting attributes from " << at << ":" << endl;
BOOST_FOREACH(const …Run Code Online (Sandbox Code Playgroud) C++没有办法获取枚举的字符串表示.人们解决这个问题通过编写又名含有大量的样板代码自定义函数
switch与case XYZ return "XYZ";
那当然要求枚举的用户知道自定义函数的名称.
所以我想我可以添加一个专门化std::to_string来让用户to_string在我的枚举上使用.像这样的东西:
//
#include <iostream>
#include <string>
#include <cassert>
#define TEST
class Car
{
public:
enum class Color
{
Red,
Blue,
White
};
};
#ifdef TEST
#include <string>
namespace std
{
std::string to_string (Car::Color c)
{
switch (c)
{
case Car::Color::Red:
return "Red";
case Car::Color::Blue:
return "Blue";
case Car::Color::White:
return "White";
default:
{
assert(0);
return "";
}
}
}
}
#endif
int main()
{
std::cout << std::to_string(Car::Color::White) << std::endl; …Run Code Online (Sandbox Code Playgroud) 我不知道下面的代码有什么问题....我从文本框中获取输入并将输入放在一个字符串中.如果文本框为空,则返回空字符串.在下面的代码中
String[] str = new String[9];
for(int i=0;i<9;i++){
if(str[i].equals("")){
System.out.println("set " + cmds[i] + " " + str[i]);
WriteThread.sendCommand("set " + cmds[i] + " " + str[i] + "\n", false);
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码str[i]存储文本框的输入文本,我试图检查数组的任何元素是否为空.我也试图与str[i] == ""和str[i] == null,但没有运气.如果我打印字符串str[i],if块内的语句,它没有显示任何意味着它是空的.
我做错了什么吗?
我有一个名为的哈希表table.类型值是long.我正在使用价值观.values().现在我想访问这些值.
Collection val = table.values();
Iterator itr = val.iterator();
long a = (long)itr.next();
Run Code Online (Sandbox Code Playgroud)
但是当我试图得到它时,它会给我错误,因为我无法从类型转换object为long.我该怎么办呢?
我在C++ Faq lite中没有看到答案:
如何定义基类,以便每个继承它的类都需要定义析构函数?
我试过运行这个程序
struct VDtor { virtual ~VDtor()=0; };
struct Test:VDtor { virtual ~Test(){} };
int main() { delete new Test; return 0; }
Run Code Online (Sandbox Code Playgroud)
http://codepad.org/wFcE71w3 有错误
In function `Test::~Test()':
t.cpp:(.gnu.linkonce.t._ZN4TestD0Ev+0x1e): undefined reference to `VDtor::~VDtor()'
In function `Test::~Test()':
t.cpp:(.gnu.linkonce.t._ZN4TestD1Ev+0x1e): undefined reference to `VDtor::~VDtor()'
Run Code Online (Sandbox Code Playgroud)
那么,有可能吗?
我见过很多人在Stack Overflow上建议使用Boost库,所以我也在考虑学习它.但今天我发现了这个链接:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Boost
我想知道它在更广泛的行业中的接受程度.我现在的公司也不允许我使用这个,所以我很困惑是否要研究这个问题.
请注意,我是C++的新手.
当我编译我的程序时,我注意到我为每个类创建了一个.obj.当我查看程序文件中的其他程序时,我意识到这些程序几乎没有任何.obj,所以我猜我做错了.
此外,如果我从发布目录中删除obj文件并尝试再次运行exe并且它仍然像以前一样工作,我知道这些文件不能毫无意义但是......
它们的用途是什么?它应该为每个类文件制作它们吗? - 如果不是我如何解决这个问题?
当我编译时,如何将它们放在一个名为obj的文件夹中的目录中?
我正在研究游戏引擎,目前我不得不设计IO系统.我已经做到了,引擎本身不处理任何文件格式,而是让用户通过创建*.dll具有适当命名函数的文件来实现他想要的任何东西.虽然这本身并不是什么大问题,但我主要担心的是在发动机使用过程中可能会出现的影响.
我设计了一个简单的resource接口作为用户可以想到的所有东西的基类,我试图通过创建专用于常见数据类型的简单子类来扩展它,因此用户不必实现基础知识由他本人(目前我在想audio,image,data和mesh).从audio课堂开始,我偶然发现了一个特殊的问题,同时试图决定应该以什么类型存储有关采样率的信息.通常的单位是赫兹,所以我决定把它变成一个unsigned int.
但是这里有一点问题 - 如果用户试图用千赫兹设置它会怎么样?让我们假设一些抽象文件格式可以暂时将它存储在两个单元中.我已经创建了一个简单的包装类来命名单元类型:
class hertz{
private:
unsigned int value;
hertz(){};
public:
operator unsigned int();
hertz(unsigned int value);
};
Run Code Online (Sandbox Code Playgroud)
并决定让用户也使用kHz:
class kilohertz{
private:
float value;
kilohertz(){};
public:
operator hertz();
kilohertz(float value);
};
Run Code Online (Sandbox Code Playgroud)
虽然audio类中的函数允许用户设置采样率,但声明为track& samplingRate(units::hertz rate);.用户必须通过明确说出他正在使用的数量级来调用它:
someAudioFile.samplingRate(hertz(44100));
someAudioFile.samplingRate(kilohertz(44.1));
Run Code Online (Sandbox Code Playgroud)
我的问题是:
是否有更好的方法迫使用户以简单而优雅的方式使用测量单元?一个设计模式可能,或者一些巧妙使用typedef?
另请注意,在创建引擎的过程中,我可能需要更多与Hertz不兼容的单元.从我的头脑 - 我可能希望用户能够通过做units::rgb(123,42,120)和设置像素颜色units::hsl(10,30,240).
我已经尝试寻找一个可行的答案并且只找到了这个问题,但OP只需要数量级而不确保单位与其他单位不兼容.
另请注意我使用旧 …