标签: instantiation

从DLL导出STL类 - 为什么返回类型没有警告?

我的问题与导出带有STL的C++类有关.例如:

class __declspec(dllexport) Hello
{
    std::string   name;

public:
    std::string&  getName();
    void          setName(const std::string& name);
}
Run Code Online (Sandbox Code Playgroud)

各种文章似乎表明这是非常糟糕的,这是很容易理解的.必须使用相同的编译器设置和CRT版本编译所有内容.否则一切都会崩溃和燃烧.

题:

我不明白为什么只有数据成员似乎有问题.使用下面的代码,我得到:" C4251:需要让dll接口被类的客户端使用 "; 这显然是通过导出实例化的std :: string来修复的:

struct __declspec(dllexport) SomeClass
{
    // Removes the warning?
    // http://www.unknownroad.com/rtfm/VisualStudio/warningC4251.html
    //   template class __declspec(dllexport) std::string;

    std::string name;  // Compiler balks at this
}
Run Code Online (Sandbox Code Playgroud)

固定版本是:

// Export the instantiations of allocator and basic_string
template class __declspec(dllexport) std::allocator<char>;
template class __declspec(dllexport) std::basic_string<char, std::char_traits<char>, std::allocator<char> >;

struct __declspec(dllexport) SomeClass
{
    std::string name;  // No more balking!
}
Run Code Online (Sandbox Code Playgroud)

(当您尝试使用DLL时,这将为LNK2005"basic_string已定义",这意味着您不必在客户端上的CRT中链接 …

c++ dll stl instantiation visual-studio-2010

20
推荐指数
2
解决办法
7169
查看次数

避免在java中实例化一个类

最近我遇到了一个问题:如何避免实例化Java类?

但是,我回答说:

  1. 如果您不想实例化类,请使用"abstract"修饰符.例如:javax.servlet.HttpServlet被声明为抽象(尽管它的方法都不是抽象的)以避免实例化.

  2. 声明一个无参数的私有构造函数.

现在我的问题是a)还有其他方法吗?b)为什么任何人都不想实例化一个类?-在SO搜索后,我从知道这个那个的Util类可以做出不实例化.我们不想在OOP中实例化一个类的任何其他地方?

java class instantiation

19
推荐指数
2
解决办法
3万
查看次数

实例化一个对象而不在PHP中调用它的构造函数

要恢复已持久化的对象的状态,我想在不调用其构造函数的情况下创建该类的空实例,以便稍后使用Reflection设置属性.

我找到的唯一方法,就是Doctrine的做法,就是创建一个虚假的对象序列化,并对unserialize()它:

function prototype($class)
{
    $serialized = sprintf('O:%u:"%s":0:{}', strlen($class), $class);
    return unserialize($serialized);
}
Run Code Online (Sandbox Code Playgroud)

还有另一种不那么黑客的方法吗?

我期待在反思中找到这样的方式,但我没有.

php oop reflection instantiation

19
推荐指数
2
解决办法
8756
查看次数

Java中的内联对象实例化和转换

我从Visual Basic来到Java,似乎认为我曾经在很多方面被宠坏了:p

有没有办法实例化一个对象并内联修改它?就像是:

JFrame aFrame = new JFrame();   
aFrame.add(new JPanel() {.setSize(100,100) .setLocation(50,50) .setBackground(Color.red) });
Run Code Online (Sandbox Code Playgroud)

我能够使用@Override方法,但我正在寻找更简单的方法.我有很多搜索,但是如果有这种内联实例化的特定术语,它就会让我失望.

感谢您的时间!

java inline class instantiation

18
推荐指数
2
解决办法
2万
查看次数

在Java中从该类的主要内部实例化对象

我正在浏览我的OOP类文档,我发现了这个例子:

class Student {
    private String name;
    public int averageGrade;


    public Student(String n, int avg) {
        name = n;
        averageGrade = avg;
    }

    public static void main(String[] args) {
        Student s = new Student("John", 9);
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现它们正在从同一个类的主要实例化一个对象时感到困惑.这被认为是不好的做法吗?新创建的对象s是否有主方法?

谢谢!

java program-entry-point class object instantiation

17
推荐指数
2
解决办法
3万
查看次数

如何在Objective-C中实例化一个不从NSObject继承的类

鉴于这种:

Person.h:

@interface Person 
{
}
- (void) sayHello;
@end
Run Code Online (Sandbox Code Playgroud)

Person.m:

#import "Person.h"

@implementation Person 

- (void)sayHello 
{
    printf("%s", "Steve");
}

@end
Run Code Online (Sandbox Code Playgroud)

你如何实例化这个人?我试过这个:

Person *p = [Person new];
Run Code Online (Sandbox Code Playgroud)

这不起作用,也不是这样的:

Person *p = [Person alloc];
Run Code Online (Sandbox Code Playgroud)

[UPDATE]

我忘了告诉,我已经尝试从NSObject继承,新的和alloc工作.我只是好奇我们是否可以实例化一个不从NSObject继承的类?

class objective-c instantiation

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

模板是如何实例化的?

这是C++ Primer第5版的练习:

练习16.27:对于每个带标签的语句,解释实例化发生的情况(如果有的话).如果模板被实例化,请解释原因; 如果没有,请解释原因.P.677

template <typename T> class Stack { };

void f1(Stack<char>);                   // (a)

class Exercise {
    Stack<double> &rsd;                 // (b)
    Stack<int>    si;                   // (c)
};

int main() {
    Stack<char> *sc;                    // (d)
    f1(*sc);                            // (e)
    int iObj = sizeof(Stack< string >); // (f)
}
Run Code Online (Sandbox Code Playgroud)

以下是我的尝试:

(a)Stack<char>被实例化,但没有实例化它的成员.

(b)Stack<double>被实例化,但没有实例化其成员.

(c)Stack<int>并实例化其默认构造函数.

(d)(e)完全不知道......

(f)Stack< string >被实例化,但没有实例化其成员.

我对吗?谁能告诉我这个代码是如何实例化的?

c++ templates instantiation

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

java中延迟线程安全单例实例化的模式

懒惰的线程安全单例实例对每个编码器来说都不容易理解,所以我想在我们的企业框架中创建一个可以完成这项工作的类.

你怎么看待这件事?你觉得它有什么坏处吗?在Apache Commons中有类似的东西吗?我怎样才能让它变得更好?

Supplier.java

public interface Supplier<T> {
    public T get();
}
Run Code Online (Sandbox Code Playgroud)

LazyThreadSafeInstantiator.java

public class LazyThreadSafeInstantiator<T> implements Supplier<T> {
    private final Supplier<T> instanceSupplier;

    private volatile T obj;

    public LazyThreadSafeInstantiator(Supplier<T> instanceSupplier) {
        this.instanceSupplier = instanceSupplier;
    }

    @Override
    // http://en.wikipedia.org/wiki/Double-checked_locking
    public T get() {
        T result = obj;  // Wikipedia: Note the usage of the local variable result which seems unnecessary. For some versions of the Java VM, it will make the code 25% faster and for others, it won't hurt.
        if …
Run Code Online (Sandbox Code Playgroud)

java singleton instantiation thread-safety lazy-evaluation

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

困惑:在c ++中创建c#类的实例

假设someClass是在C#中使用某种方法定义的类int doSomething(void),为简单起见,提供不带参数的构造函数.然后,在C#中,必须在gc堆上创建实例:

someClass c;                   // legit, but only a null pointer in C#
// c->doSomething()            // would not even compile. 
c = new someClass();           // now it points to an instance of someclass.
int i = c->doSomething();      
Run Code Online (Sandbox Code Playgroud)

现在,如果someClass编译成一些.Net库,你也可以在C++/CLI中使用它:

someClass^ cpp_gcpointer = gcnew someClass();
int i = cpp_gcpointer->doSomething();
Run Code Online (Sandbox Code Playgroud)

那简单!漂亮!这当然假设已经将.Net库的引用添加到项目中并且已经进行了相应的使用声明.

我的理解是,这是前一个C#示例的精确C++/CLI等效(缩写为单行,这不是我感兴趣的点).正确?(对不起,我是这个话题的新手)

但是,在C++中也是如此

someClass cpp_cauto;              // in C++ declaration implies instantiation
int i = cpp_cauto.doSomething(); 
Run Code Online (Sandbox Code Playgroud)

是有效的语法.出于好奇,我今天试了这个.一位同事,看着我的肩膀,愿意打赌它甚至不会编译.他本可以输掉赌注.(这仍然是C#程序集中的类).实际上它产生的结果i与前面例子中的代码相同.

也很漂亮,但是 - 嗯 - 究竟是什么,这里创造了什么?我的第一个猜测是,在我的背后,.Net在gc堆上动态创建一个实例,并且cpp_auto是这个对象的某种包装器,其行为类似于类的实例someClass.但后来我找到了这个页面 …

.net c# c++ stack instantiation

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

实例化Java抽象类?

相对较新的Java程序员和我已经被教导过你不能创建一个抽象类的实例.我也做了一些研究,我了解到在大多数情况下,当它出现一个抽象类时,它实际上是一个匿名的子类.但这是我遇到的问题:

Java的URL类有一个openConnection返回的方法URLConnection.URLConnection是一个抽象类,Java文档也将其所有子类列为抽象类......所以我真的迷失了.什么回来了?

java urlconnection instantiation abstract

16
推荐指数
5
解决办法
1321
查看次数