我有一个Python函数,它需要几个参数.在某些情况下,可以省略其中一些参数.
def some_function (self, a, b, c, d = None, e = None, f = None, g = None, h = None):
#code
Run Code Online (Sandbox Code Playgroud)
这些参数d通过h是字符串,每个都有不同的含义.重要的是我可以选择以任意组合传递哪些可选参数.例如,(a, b, C, d, e)或(a, b, C, g, h),或(a, b, C, d, e, f,或全部(这些是我的选择).
如果我可以重载函数会很棒 - 但我读到Python不支持重载.我试图在列表中插入一些必需的int参数 - 并得到一个参数不匹配错误.
现在我发送空字符串代替前几个缺少的参数作为占位符.我希望能够使用实际值调用函数.
有没有办法做到这一点?我可以传递一个列表而不是参数列表吗?
现在使用ctypes的原型看起来像:
_fdll.some_function.argtypes = [c_void_p, c_char_p, c_int, c_char_p, c_char_p, c_char_p, c_char_p, c_char_p]
Run Code Online (Sandbox Code Playgroud) 我需要提取某个路径的父目录的名称.这就是它的样子:directory_i_need.我正在使用其中的directory_i_need名称(而不是路径)修改"文件"的内容.我创建了一个函数,它将为我提供所有文件的列表,然后......
c:\stuff\directory_i_need\subdir\file
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我试图测试一个方法 - 并得到一个错误:
public interface IHasRect
{
Rectangle Rectangle { get; }
}
Run Code Online (Sandbox Code Playgroud)
以下所需信息:
class Item : IHasRect
{
public Item(Point p, int size)
{
m_size = size;
m_rectangle = new Rectangle(p.X, p.Y, m_size, m_size);
}
}
Run Code Online (Sandbox Code Playgroud)
助手班:
public class SomeClass<T> where T : IHasRect
Run Code Online (Sandbox Code Playgroud)
对于要测试的函数,我需要实例化一个对象......
public void CountTestHelper<Item>() where Item : IHasRect
{
Rectangle rectangle = new Rectangle(0, 0, 100, 100);
SomeClass<Item> target = new SomeClass<Item>(rectangle);
Point p = new Point(10,10);
Item i = new Item(p, 10); // error …Run Code Online (Sandbox Code Playgroud) 我已经构建了一个可以从dot net使用的C++ dll.当我运行progran我得到一个错误,没有找到.
dll就在那里 - 但我用依赖walker检查了它 - 得到了以下内容:
API-MS-WIN-CORE-COM-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
API-MS-WIN-SHCORE-SCALING-L1-1-0.DLL
DCOMP.DLL
Error opening file. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)
我做了一个搜索 - 显然这些是Win 7文件,我有Windows 7 - 但没有找到它们.
我能做什么 ?
我正在使用VS2010,Windows 7
我想在Windows上安装CppUnit.
我已经从这里下载它,解压缩它,并注意到所有文件都有,名字中有v,没有扩展名.
安装说明(在包含的文件中,以及我发现的建议安装Windows的每个站点上都是针对Linux的.)(安装CppUnit for Windows说明的示例).
其他人,只是为了构建:( 例如:为Visual Studio指令安装CppUnit或在同一主题上安装第二个答案).
在上面的链接上接受的答案有一个评论说,接受它的人"排序它,我下载了另一个版本" - 在他遇到与我完全相同的问题之后 - 但没有指明什么版本或从哪里...
我上面的链接是最新版本.
我能够在2008年找到一个非常旧的版本1.12.1,它几乎可以构建(有很多错误).我现在用它来学习如何实现CppUnit.不过,它还有4年......我希望能够使用最新的版本......
请问,有人可以给我一些建议,我可以在Windows中实现并运行,以安装最新的cppUnit吗?
谢谢.
在我一年的Qt编程中,我学到了很多关于信号和插槽的知识.但还不够......
http://doc.qt.io/qt-5/signalsandslots.html
插槽可用于接收信号,但它们也是正常的成员功能.
那么......有没有理由不在一个类中声明每一个函数QObject作为一个插槽继承它是否需要是一个?
在上面的链接中,他们给出了一个例子:
一个基于QObject的小类可能会读取:
Run Code Online (Sandbox Code Playgroud)#include <QObject> class Counter : public QObject { Q_OBJECT public: Counter() { m_value = 0; } int value() const { return m_value; } public slots: void setValue(int value); signals: void valueChanged(int newValue); private: int m_value; };
为什么将value()函数定义为普通函数而不是插槽?如果它们确实成为一个插槽,会有任何负面结果吗?
我试图找出一个应用程序(而不是vb.net)的实例是否已经在运行 - 因为我想启动它,但如果它已经运行我不想启动它.我找到了一个解决方案来检查进程是否正在运行:
Dim proc As Integer = Process.GetProcessesByName(ProcessName).GetUpperBound(0) + 1
Run Code Online (Sandbox Code Playgroud)
如果> = 1(或只是进程号),则返回True.
我的问题是,这是一个第三方应用程序,它的进程名称不只是一个名称,但它包含一个版本号(我可能在运行时可能不知道),它似乎也添加了一个*32(很可能a*64如果它是在x64中安装的吗?).
我需要按名称获取正在运行的进程列表,并测试"processname"是否是名称的子字符串.但我没有成功获得名单,只有进程ID.
我必须将c ++项目的目标框架从4.0更改为3.5.我发现这个问题/答案有助于如何做到这一点:使用vs2010将C++/CLI项目更改为4.0以外的另一个框架
我遇到了以下问题:我收到警告:
warning MSB3258: The primary reference "path\file.dll" could not be resolved because it has an indirect dependency on the .NET Framework assembly "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" which has a higher version "4.0.0.0" than the version "2.0.0.0" in the current target framework
Run Code Online (Sandbox Code Playgroud)
与同为System, Version=4.0.0.0,Microsoft.VisualC, Version=10.0.0.0,System.Configuration, Version=4.0.0.0,System.Xml, Version=4.0.0.0,System.Security, Version=4.0.0.0,和System.Data.SqlXml, Version=4.0.0.0.这会导致所有依赖于无法找到的file.dll的项目出错.
我不知道如何解决这个问题.我也安装了Visual Studio 2008 - 虽然它似乎并不关心,并且使用Platform Toolset v90甚至使c ++项目无法构建.请帮忙 !
我试图通过代码获取有关c + =程序的一些信息.我在EnvDTE上取得了一些成功,现在我需要使用VCProject和VCCodeModel,我遇到了投射问题(希望这就是全部...)
在工人阶级,我"application"从Connect传递了DTE .
我有:
EnvDTE.Project project = application.SelectedItems.Item(1).Project;
EnvDTE.Solution sol = (EnvDTE.Solution)application.Solution;
Run Code Online (Sandbox Code Playgroud)
我想使用"项目",而不是解决方案中的第一个项目作为我在网络上找到的例子 - 如下所示 - 但大多数情况下,我希望有一些先行的.
对于VCProject,我尝试过(关闭Microsoft的网站以及所有其他Web示例):
VCProject vcProject = (VCProject)application.Solution.Projects.Item(1).Object;
MessageBox.Show(vcProject.ProjectDirectory);
Run Code Online (Sandbox Code Playgroud)
要不就
VCProject vcProject = (VCProject)project.Object;
Run Code Online (Sandbox Code Playgroud)
对于VCCodeModel,我翻译为c#http : //msdn.microsoft.com/en-us/library/microsoft.visualstudio.vccodemodel.vccodeinclude.aspx:
public void GetAllIncludes()
{
VCCodeModel vcCM = (VCCodeModel)application.Solution.Item(1).CodeModel;
foreach (VCCodeInclude vcInclude in vcCM.Includes)
{
MessageBox.Show(vcInclude.DisplayName);
}
}
Run Code Online (Sandbox Code Playgroud)
两者都给予例外:
"unable to cast com object of type 'system.__comobject' to interface type Microsoft.VisualStudio.VCCodeModel"
"unable to cast com object of type 'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCProjectShim' to type Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCProject"
Run Code Online (Sandbox Code Playgroud)
我怎么设置它?最好使用"项目"......或application.SelectedItems …
我想绘制具有各种宽度边框的形状.
如果我设置width = 0,我希望(想象)这里没有边框......但我读到边框0非常薄("化妆品")边框.
如何用隐形边框绘制形状?
int penWidth = 0; // some user input, 0 to 20 maybe
QPen pen = QPen(Qt::red, penWidth, Qt::PenStyle(Qt::SolidLine));
painter->setPen(pen);
painter->setBrush(QBrush(Qt::SolidPattern));
painter->drawRect(someRect);
Run Code Online (Sandbox Code Playgroud)