我正在使用ANTLR生成Java源文件.我可以让Eclipse了解生成的文件是派生的,但它仍然会给我警告无害的东西(例如不必要的导入等).我想配置Eclipse在显示警告时忽略派生文件.这可能吗?
我在尝试实现自定义流类以在输出文件中生成漂亮的缩进代码时遇到了一些麻烦.我在网上广泛搜索,但似乎没有就实现这一目标的最佳方式达成共识.有些人谈论派生流,其他人谈论推导缓冲,而其他人建议使用locales/facets等.
基本上,我发现自己写了很多这样的代码:
ofstream myFile();
myFile.open("test.php");
myFile << "<html>" << endl <<
"\t<head>" << endl <<
"\t\t<title>Hello world</title>" << endl <<
"\t</head>" << endl <<
"</html>" << endl;
Run Code Online (Sandbox Code Playgroud)
当标签开始加起来时,它看起来很糟糕,看起来像这样的东西会很好:
ind_ofstream myFile();
myFile.open("test.php");
myFile << "<html>" << ind_inc << ind_endl <<
"<head>" << ind_inc << ind_endl <<
"<title>Hello world</title>" << ind_dec << ind_endl <<
"</head>" << ind_dec << ind_endl <<
"</html>" << ind_endl;
Run Code Online (Sandbox Code Playgroud)
即创建一个派生流类,它将跟踪其当前的缩进深度,然后一些操纵器增加/减少缩进深度,一个操纵器编写一个换行符,然后是多个标签.
所以这是我实现类和操纵器的镜头:
ind_ofstream.h
class ind_ofstream : public ofstream
{
public:
ind_ofstream();
void incInd();
void decInd();
size_t getInd();
private:
size_t …Run Code Online (Sandbox Code Playgroud) 我试图通过基类虚函数获取对象的派生类型.我写了这个,不编译:
struct base {
virtual base& get_this() {
return *this;
}
};
struct derived : base {
virtual derived& get_this() override {
return *this;
}
void fn();
};
int main () {
base* pd = new derived();
derived& x = pd->get_this(); /*ERROR*/
x.fn();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
...给我一个错误:我无法初始化derived&a base.既然get_this是虚拟的,为什么要pd->get_this()返回base&而不是derived&?提前致谢!
编辑:
感谢大家对我迟到的回复所给出的有用答案和道歉.我应该在原帖中指出我也对我的问题的解决方案感兴趣,而不仅仅是弄清楚上面为什么不编译.我的主要问题是该类fn是唯一的,derived不能通过基类调用.使用强制转换肯定解决了问题,但我讨厌用if else构造编写代码以获得正确的类型(也是Scott Meyers建议反对强制转换:)).答案似乎表明演员阵容是要走的路,这在某种程度上至少让人放心,我不会忽视对我的问题更"优雅"的解决方案.再次感谢!
我有一个基类和一个派生类,如下所示
public class animal
{
public string name { get; set; }
}
public class dog : animal
{
public int age { get; set; }
public string type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
animal a = new animal();
dog d = new dog();
a = d; //compiled
d = a; //Error:Cannot implicitly convert type 'animal' to 'dog'.
d = (dog)a; // compiled
Run Code Online (Sandbox Code Playgroud)
内部派生类可以分配给base但是需要进行反向显式转换?即使base和derived类都包含相同的成员,也会发现相同的结果.
根据C++ 单例设计模式, 我写了一个单例模板
template <typename T>
class Singleton
{
public:
static T& getInstance()
{
static T instance;
return instance;
}
protected:
Singleton() {}
~Singleton() {}
public:
Singleton(Singleton const &) = delete;
Singleton& operator=(Singleton const &) = delete;
};
Run Code Online (Sandbox Code Playgroud)
然后我写了一个 Logger 单例(第一个)
class Logger // not derived Singleton<Logger>
{
friend class Singleton<Logger>;
private:
Logger(){};
~Logger(){};
public:
void print(void){std::cout << "hello" << std::endl;}
};
int main(void)
{
Singleton<Logger>::getInstance().print(); // use Singleton<Logger>
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但我也可以(第二个)
class Logger:public Singleton<Logger> // derived Singleton<Logger> …Run Code Online (Sandbox Code Playgroud) 我有一个Maven Java项目,使用导入m2eclipse.
该target/目录未标记为" Derived" m2eclipse.
问题:
JSP Problem,当我故意在jsp中插入错误时.可能会看到post eclipse-ignore-folder
注意:当我手动将目录设置为派生时,验证问题不会消失,因此这只是解决方案的一部分......
问题:
我需要做些什么,以便m2eclipse将target/目录设置为'Derived'?
应该首选哪两个?
有一些方法由A,B和C类调用.
这些方法是否应该封装在D类(A,B和C的基础)中?
要么
如果将这些方法封装在类U和其他类创建中,则它的对象是根据需要使用这些方法.
在什么基础上应该做出决定?
谢谢.
有人可以解释为什么下面的代码的结果将是"B类:: 1"?
为什么派生类的虚方法使用基类的默认参数而不是自己的默认参数?对我来说这很奇怪.提前致谢!
码:
#include <iostream>
using namespace std;
class A
{
public:
virtual void func(int a = 1)
{
cout << "class A::" << a;
}
};
class B : public A
{
public:
virtual void func(int a = 2)
{
cout << "class B::" << a;
}
};
int main()
{
A * a = new B;
a->func();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 这个问题一直围绕着我.
有人可以根据现有的开源项目创建新产品吗?
假设您要创建一个"Apaxe webserver",它基本上是Apache,带有一些额外的插件(比如支持ASP或类似的东西)
这可能吗?
您能否创建一个封闭的源产品(免费或许可)
至于GPL似乎很清楚它是不可能的,因为源应该是开放的.但是Apache许可,BSD和其他"公司友好"怎么样?
价格(对于大多数项目是免费的),错误修复和核心开发团队的计数是阻止其他人将这些OS产品商业化的唯一因素吗?
那么:Khrome是一个基于Chrome的商业产品,支持ActiveX(谁敢做这样的事情:P)
编辑
谢谢大家的答案.
所以,再一次
什么阻止类似(克隆)产品出现在市场上?
:)
注意:我知道我们不是律师,我们可以在http://www.opensource.org/licenses上阅读每个OSS许可证.
我有一辆Car和派生的SportsCar:Car这样的
东西:
public class Car
{
public int TopSpeed{ get; set; }
}
public class SportsCar : Car
{
public string GirlFriend { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个Web服务,返回汽车的方法,即:
[WebMethod]
public Car GetCar()
{
return new Car() { TopSpeed = 100 };
}
Run Code Online (Sandbox Code Playgroud)
它返回:
<Car>
<TopSpeed>100</TopSpeed>
</Car>
Run Code Online (Sandbox Code Playgroud)
我有另一种方法也返回这样的汽车:
[WebMethod]
public Car GetMyCar()
{
Car mycar = new SportsCar() { GirlFriend = "JLo", TopSpeed = 300 };
return mycar;
}
Run Code Online (Sandbox Code Playgroud)
它编译很好和一切,但在调用它时我得到:
System.InvalidOperationException:生成XML文档时出错.---> System.InvalidOperationException:不期望wsBaseDerived.SportsCar类型.使用XmlInclude或SoapInclude属性指定静态未知的类型.
我觉得奇怪的是,因为mycar是一辆汽车所以它不能将其序列化为直车.
在WebMethod上添加XmlInclude可以消除错误:
[WebMethod]
[XmlInclude(typeof(SportsCar))]
public Car GetMyCar()
{
Car …Run Code Online (Sandbox Code Playgroud)