从cppreference,我发现:
类模板std :: function是一个通用的多态函数包装器.std :: function的实例可以存储,复制和调用任何Callable目标 - 函数,lambda表达式,绑定表达式或其他函数对象,以及指向成员函数和指向数据成员的指针.
我不明白为什么一个std::function应该能够存储这样的指针,我以前从未听说过这个功能.
它是否真的可能,我错过了某些内容或文档中的错误?
operator()在这种情况下应该怎么做?
从文档中可以看出:
使用参数args调用存储的可调用函数目标.
无论如何,这里没有存储的可调用函数目标.我错了吗?
说实话,我甚至无法弄清楚这个函数的正确语法是什么,否则我会写一个例子来测试它.
如何使用以下模板来定义指向数据成员的指针?
template< class R, class... Args >
class function<R(Args...)>
Run Code Online (Sandbox Code Playgroud) 我有class A如下所述: -
class A{
int iData;
};
Run Code Online (Sandbox Code Playgroud)
我既不想创建成员函数也不继承上面的内容,class A也不想更改说明符iData.
我的疑惑: -
iData一个对象说obj1哪个是实例class A?iData对象obj1?注意:请勿使用friend.
如果一个静态数据成员依赖于另一个静态数据成员,C#/ .NET是否保证依赖成员之前初始化依赖的静态成员?
例如,我们有一个类,如:
class Foo
{
public static string a = "abc";
public static string b = Foo.a + "def";
}
Run Code Online (Sandbox Code Playgroud)
当访问Foo.b时,它总是"abcdef"还是"def"?
如果不能保证,有没有更好的方法来确保首先初始化depen成员?
假设我有一个跨平台Path类,如:
class Path {
public:
// ...
Path parent() const; // e.g., /foo/bar -> /foo
std::string const& as_utf8() const {
return path;
}
private:
std::string path;
};
Run Code Online (Sandbox Code Playgroud)
所述parent()成员函数返回的父路径this的路径,所以它(正确)返回一个新构造的Path对象,它表示它.
对于将OS级别的路径表示为UTF-8字符串(例如,Unix)的平台,将as_utf8()引用直接返回到内部表示似乎是合理的,path因为它已经是 UTF-8.
如果我有以下代码:
std::string const &s = my_path.as_utf8(); // OK (as long as my_path exists)
// ...
Path const &parent = my_path.parent(); // OK (temporary lifetime extended)
Run Code Online (Sandbox Code Playgroud)
这两行都很好,因为:
my_path持续存在,那么s仍然有效.parent()由const&.到现在为止还挺好.但是,如果我有以下代码: …
我知道这已被问过很多,但我能找到的唯一答案就是当const-ness实际上是使用(int*)或类似的方法进行的.当没有涉及强制转换时,为什么const限定符不在const对象上处理指针类型成员变量?
#include <iostream>
class bar {
public:
void doit() { std::cout << " bar::doit() non-const\n"; }
void doit() const { std::cout << " bar::doit() const\n"; }
};
class foo {
bar* mybar1;
bar mybar2;
public:
foo() : mybar1(new bar) {}
void doit() const {
std::cout << "foo::doit() const\n";
std::cout << " calling mybar1->doit()\n";
mybar1->doit(); // This calls bar::doit() instead of bar::doit() const
std::cout << " calling mybar2.doit()\n";
mybar2.doit(); // This calls bar::doit() const correctly
}
// ... (proper copying elided …Run Code Online (Sandbox Code Playgroud) 很多时候,我看到开发人员正在使用DataContract和DataMember属性作为他们的Asp.net Web API模型?
有什么区别和最佳做法?
我有无数来自 SQLAlchemy 的各种项目的 Python 类(还有一些来自 Pygame 的项目),我最近注意到其中许多项目中的一个模式:它们的构造函数总是这样:
class Foo(Base):
def __init__(self, first, last, email, mi=""):
self.first = first
self.last = last
self.email = email
self.mi = mi
Run Code Online (Sandbox Code Playgroud)
...由此构造函数所做的唯一一件事就是将一组位置参数传输到一组完全相同命名的数据成员中,不执行任何计算或其他函数调用。
在我看来,这种重复是不必要的,并且在更改时容易出现人为错误。
这让我想到了一个问题:是否可以自动生成这样的__init__(self, ...)函数,最好不要乱用 CPython 字节码或使用模板/宏来改变源文件本身?
以下是Bruce Eckel 在C++中的思考(第1卷,第2版,第11章)中标题为"指向成员的指针" 的段落:
...指针需要一个地址,但是类中没有"地址"; 选择类成员意味着抵消该类.您不能生成实际地址,直到将该偏移量与特定对象的起始地址组合.指向成员的指针语法要求您在取消引用指向成员的指针的同时选择一个对象.
这句话是什么意思?我想做的事情如下:
&(objectname.member_variable)
Run Code Online (Sandbox Code Playgroud)
我得到一个实际的地址,比如0x22f14,但是这个偏移量意味着距离起始地址有多远?
如果我有一个像这样的简单类设置:
class MyClass
{
private string _myName = string.Empty;
public string MyName
{
get
{
return _myName;
}
}
public void DoSomething()
{
// Get the name...
string name = string.Empty;
name = _myName;
// OR
name = MyName;
// ...and do something with it...
}
}
Run Code Online (Sandbox Code Playgroud)
我应该使用哪个,公共财产或数据成员?
显然,在这个例子中它没有什么区别,因为它们都只是引用相同的变量.但是公共财产的现实用途呢?
一般来说,公共属性执行得非常少,在这种情况下可以调用它们吗?或者人们将大量功能放入他们的公共属性中,不应该被内部类引用调用?
我在另一篇文章中看到了一些关于不向Properties中添加大量功能的内容,因为在调试器中检查它们可以执行意外的结果.真的吗?
在将一个字段分配给另一个字段时,C#是仅仅复制数据还是实际创建链接?在这个文章有游戏引擎结构的一个例子.那里的编码器包含其父组件.在C#中,它们只包含父副本,还是引用它?
示例代码:
class World
{
...
public void Update()
{
...
ent.OnAttach(this);
...
}
...
}
class Entity
{
...
public void OnAttach(World world)
{
world_ = world;
}
...
}
Run Code Online (Sandbox Code Playgroud)
Entity对象现在可以访问World对象并可以访问它的字段和方法,就像在artice中一样吗?(或者我误解了代码?)
可能重复:
Java中是否可以通过反射访问私有字段
有没有办法让我们可以在java中调用类的私有数据成员,可以在类外访问.我希望这是一个棘手的问题银行.尽管我的java体验,我认为这是可能的,但我不知道如何做到这一点.
class A
{
float m_Period; // a1
float m_Scale; // a2
};
Run Code Online (Sandbox Code Playgroud)
我可以像这样指向数据成员:
float A::*pFloat;
Run Code Online (Sandbox Code Playgroud)
由于循环中句柄成员的原因,我需要一组这样的指针.这该怎么做.
non-static data member initializers only available with -std=c++11 or -std=gnu++11
[enabled by default]
int Red = 255;
non-static data member initializers only available with -std=c++11 or -std=gnu++11
[enabled by default]
int Green = 255;
non-static data member initializers only available with -std=c++11 or -std=gnu++11
[enabled by default]
int Blue = 255;
Run Code Online (Sandbox Code Playgroud)
不知道为什么这不起作用.
struct color {
int Red = 255;
int Green = 255;
int Blue = 255;
};
Run Code Online (Sandbox Code Playgroud) data-members ×13
c++ ×7
c# ×3
asp.net ×2
c++11 ×2
pointers ×2
private ×2
api-design ×1
arrays ×1
class ×1
const ×1
constructor ×1
datacontract ×1
java ×1
non-static ×1
properties ×1
python ×1
static ×1
std-function ×1
stl ×1
temporary ×1