如何使用元类向类中添加实例方法(是的,我需要使用元类)?以下类型的工作,但func_name仍将是"foo":
def bar(self):
print "bar"
class MetaFoo(type):
def __new__(cls, name, bases, dict):
dict["foobar"] = bar
return type(name, bases, dict)
class Foo(object):
__metaclass__ = MetaFoo
>>> f = Foo()
>>> f.foobar()
bar
>>> f.foobar.func_name
'bar'
Run Code Online (Sandbox Code Playgroud)
我的问题是某些库代码实际上使用了func_name,后来无法找到Foo实例的'bar'方法.我可以:
dict["foobar"] = types.FunctionType(bar.func_code, {}, "foobar")
Run Code Online (Sandbox Code Playgroud)
还有types.MethodType,但我需要一个尚未使用的实例.我在这里错过了吗?
环境:Visual Studio 9,没有托管扩展的C++.
我有一个第三方库,它导出MyClass<42>MyClass.h中定义的完全专用的模板类.它被编译成辅助加载器.lib和.dll文件..lib文件包含此特化的编译代码和必要的符号.MyClass.h看起来像这样:
template<UInt D>
class MyClass {
public:
MyClass() {...};
virtual ~MyClass() {};
}
Run Code Online (Sandbox Code Playgroud)
现在我想使用这个库.如果我在Client.cpp中包含MyClass.h然后编译它,我将在Client.obj文件中获得这些符号的第二个副本.我可以通过将该专业化的所有成员定义为"extern"来摆脱这些符号.我的Client.cpp看起来像这样:
#include <ThirdParty/MyClass.h>
extern template class MyClass<42>;
extern template MyClass<42>::MyClass<42>();
extern template MyClass<42>::~MyClass<42>();
void MyFunction(MyClass<42>& obj) {...}
Run Code Online (Sandbox Code Playgroud)
问题是我无法以这种方式摆脱虚拟析构函数.对于虚拟析构函数,我得到一个几乎标准的LNK2005错误:
ThirdPartyd.lib(ThirdPartyd.dll) : error LNK2005:
"public: virtual __thiscall MyClass<42>::~MyClass<42>(void)"
(??1?$MyClass@$01@@@UAE@XZ) already defined in Client.obj
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
我无法理解为什么这段代码不能编译:
namespace A {
class F {}; // line 2
class H : public F {};
}
namespace B {
void F(A::H x); // line 7
void G(A::H x) {
F(x); // line 9
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用gcc 4.3.3,错误是:
s3.cpp: In function ‘void B::G(A::H)’:
s3.cpp:2: error: ‘class A::F’ is not a function,
s3.cpp:7: error: conflict with ‘void B::F(A::H)’
s3.cpp:9: error: in call to ‘F’
Run Code Online (Sandbox Code Playgroud)
我认为,因为在第9行中没有名称空间前缀,所以F(x)应该只是明确的意思B::F(x).编译器尝试强制x转换为自己的超类.根据我的理解,它不应该.为什么这样做?
我正在尝试编写一个使用doxygen生成html文档的MSBuild项目.除了一个看似不完整的例子之外,我在网上找不到任何关于它的内容.它不解析doxygen警告.
我发现MSBuild的Exec任务有像IgnoreStandardErrorWarningFormat和CustomWarningRegularExpression这样的参数.什么是"标准错误/警告格式"以及这些属性中允许哪种RE?
编辑:啊,"Microsoft Build Engine内部"错误地将其描述为.NET 3.5中的属性,它实际上来自4.对我来说没用...
我有一个数据框和存储在变量中的公式:
> d <- data.frame(cls=1, foo=2, bar=3)
> f <- formula(cls ~ .)
Run Code Online (Sandbox Code Playgroud)
我想以编程方式从该公式的RHS中删除一个变量(在我的代码中,此变量的名称将作为字符串传递到某处).我试过用update.formula:
> update(f, .~.-foo)
Error in terms.formula(tmp, simplify = TRUE) :
'.' in formula and no 'data' argument
Run Code Online (Sandbox Code Playgroud)
然后我试着提供这个data论点:
> update(f, .~.-foo, data=d)
Error in terms.formula(tmp, simplify = TRUE) :
'.' in formula and no 'data' argument
Run Code Online (Sandbox Code Playgroud)
我知道如果初始公式在右侧没有点,上述情况将起作用:
> f <- formula(cls ~ foo + bar)
> update(f, .~.-foo)
cls ~ bar
Run Code Online (Sandbox Code Playgroud)
如果我无法确保RHS不包含点,如何从公式的RHS中删除变量?
我想在C++/CLI项目中嵌入一些文件(文本文件,可能是图形) - 最好和我在C#项目中一样.这可能是不可能的.然而,正如我在这篇文章中发现:http://bytes.com/topic/net/answers/571530-loading-markup-xamlreader-load-resource-file#post2240705.这是三年前写的,所以也许现在有一些方法可以做到这一点(在VS2k8中)?
似乎Remove-Item -Recurse -Force无法处理删除符号链接。如何递归地删除给定目录中到处都有符号链接的所有内容?
微量元素:
PS C:\Users\Administrator\Desktop\test> mkdir foo
Directory: C:\Users\Administrator\Desktop\test
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 7/30/2020 11:58 AM foo
PS C:\Users\Administrator\Desktop\test> mkdir bar
Directory: C:\Users\Administrator\Desktop\test
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 7/30/2020 11:58 AM bar
PS C:\Users\Administrator\Desktop\test> New-Item -ItemType SymbolicLink -Path foo -Name bar -Value C:\Users\Administrator\Desktop\test\bar
Directory: C:\Users\Administrator\Desktop\test\foo
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----l 7/30/2020 11:59 AM bar
PS C:\Users\Administrator\Desktop\test> Remove-Item -Recurse -Force foo
Remove-Item : There is …Run Code Online (Sandbox Code Playgroud) 我想以编程方式在Linux中制作实时文件系统的快照,最好使用LVM.我不想卸载它,因为我已经打开了很多文件(我最常见的情况是我有一个繁忙的桌面有很多程序).
我理解,由于内核缓冲区和一般文件系统活动,磁盘上的数据可能处于某种或多或少的未定义状态.
有没有办法"原子地"卸载FS,制作LVM快照并将其挂载?如果操作系统将阻止所有活动几秒钟来执行此任务,那就没问题.或者也许某种原子"同步+快照"?内核通话?
我不知道是否有可能......
我想使用CMake来编译由C ++,C ++ / CLI和C#代码组成的代码。我知道有一些非官方的宏支持C#代码。有人用过吗?他们的素质是什么?他们可靠吗?它们是否复制VS9 / MSBuild功能?
#include <string>
#include <msclr/marshal_cppstd.h>
ref class Test {
System::String^ text;
void Method() {
std::string f = msclr::interop::marshal_as<std::string>(text); // line 8
}
};
Run Code Online (Sandbox Code Playgroud)
使用VS2008编译时此代码给出:
.\test.cpp(8) : error C2665: 'msclr::interop::marshal_as' : none of the 3 overloads could convert all the argument types
f:\programy\vs9\vc\include\msclr\marshal.h(153): could be '_To_Type msclr::interop::marshal_as<std::string>(const char [])'
with
[
_To_Type=std::string
]
f:\programy\vs9\vc\include\msclr\marshal.h(160): or '_To_Type msclr::interop::marshal_as<std::string>(const wchar_t [])'
with
[
_To_Type=std::string
]
f:\Programy\VS9\VC\include\msclr/marshal_cppstd.h(35): or 'std::string msclr::interop::marshal_as<std::string,System::String^>(System::String ^const &)'
while trying to match the argument list '(System::String ^)'
Run Code Online (Sandbox Code Playgroud)
但是当我将字段更改为属性时:
property System::String^ …Run Code Online (Sandbox Code Playgroud) c++ ×2
c++-cli ×2
backup ×1
c# ×1
cmake ×1
filesystems ×1
formula ×1
linker ×1
linux ×1
marshalling ×1
metaclass ×1
msbuild ×1
namespaces ×1
polymorphism ×1
powershell ×1
python ×1
r ×1
snapshot ×1
symlink ×1
templates ×1