假设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.但后来我找到了这个页面 …
我想使用一种特殊的方法来初始化一个std::vector<unsigned int>我在其中作为参考的C++书籍中描述的内容(德国着作"Ulrich Breymann的Der C++ Programmer",如果重要的话).在这本书是关于序列类型的STL的部分,特别是指list,vector和deque.在本节中,他写道,这种序列类型有两个特殊的构造函数,即,如果X引用这样的类型,
X(n, t) // creates a sequence with n copies of t
X(i, j) // creates a sequence from the elements of the interval [i, j)
Run Code Online (Sandbox Code Playgroud)
我希望使用第二个间隔unsigned int,即
std::vector<unsigned int> l(1U, 10U);
Run Code Online (Sandbox Code Playgroud)
获取初始化的列表{1,2,...,9}.然而,我得到的是一个unsigned int值为10 的向量: - | 第二个变体是否存在,如果存在,我该如何强制它被调用?
我正在玩MS IL反汇编程序,它可以让你查看.Net程序集的内容.类和接口以树形视图显示,使用颜色和图标很好地编码.
猜测大多数图标的含义相当容易,例如一个带有大写字母"I"的蓝色图标是一个界面,一个带有"E"的灰色图标是一个枚举,但有些项目 - 尤其是.你打开一个节点时会看到的那些 - 并不总是那么容易猜到(也许只是我).浅蓝色钻石的含义是什么?可能是一个静态的公共成员,但我对这里的'可能'这个词感到不满.类似地,带有白色矩形的蓝色类符号似乎是泛型,但这又是一个猜测.
是否有正式的完整列表,其中包含解释/描述?
我有一个WPF DataGrid theDataGrid绑定到DataSet ds包含一个表.我想让用户首先在网格中选择它们然后按一个按钮(位于数据网格之外的某个位置)来删除行.我终于得到了以下几行代码,它们做了我想要的,但我觉得它很难看:
DataSet ds = new DataSet();
...
// fill ds somehow
...
private void ButtonClickHandler(object Sender, RoutedEventArgs e)
{
List<DataRow> theRows = new List<DataRow>();
for (int i = 0; i < theDataGrid.SelectedItems.Count; ++i)
{
// o is only introduced to be able to inspect it during debugging
Object o = theDataGrid.SelectedItems[i];
if (o != CollectionView.NewItemPlaceholder)
{
DataRowView r = (DataRowView)o;
theRows.Add(r.Row);
}
}
foreach(DataRow r in theRows)
{
int k = ds.Tables["producer"].Rows.IndexOf(r);
// don't …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 SQLDatasources 在 64 位 Windows 8 系统上使用 VS Express 2012 (C#) 获取 ODBC 数据源列表,如本线程here中所述,我指的是 Stephan Keller 的回复。
如果选择了目标平台的“首选 32 位”选项,他的代码编译良好并且运行没有任何错误,但如果我使用“anycpu”而不使用“首选 32 位”或“x64”作为目标平台,则会遇到内存访问冲突. 我猜(但不确定)这是因为在这种情况下调用 SQLDataSources 的参数没有正确对齐,对吗?(我可以在进程资源管理器中看到该程序使用 c:\windows\system32\odbc32.dll,它在 64 位 Windows 系统上是 64 位,所以使用的 dll 是,据我所知,正确的)。
假设我的猜测是正确的,我搜索但找不到从 ODBC32.dll 中使用的 SQL 数据类型(如 SQLSmallInt,MS 文档中使用的那些)到 .Net 64 的映射的参考位数据类型。任何指针?
提前致谢,
托马斯
通过 git,我进行了一些更改,现在希望将它们放在一个新分支中。如何实现这一点在几个地方都有解释,例如这里
我的困惑更多地与此任务的本地/远程方面有关。
我首先将 github 上的存储库分叉到 myForkOnGitHubRepo。然后我将该存储库克隆到我的本地 PC:
local: git clone myForkOnGitHubRepo
Run Code Online (Sandbox Code Playgroud)
然后我更改了源,提交并推送:
local: git add .
local: git commit
local: git push # (actually I used the minGW Gui for that one since the command line push issued a warning)
Run Code Online (Sandbox Code Playgroud)
现在我的本地更改在 myForkOnGitHubRepo 中可见。美好的。现在我注意到我更愿意使用一个新分支(并且也在 myForkOnGitHubRepo 的新分支中进行更改)。
我可以按照我在开头发布的链接中的说明进行操作吗?
local: git branch newbranch
local: git reset --hard HEAD~1 # only one commit was done
Run Code Online (Sandbox Code Playgroud)
然后——好吧,现在怎么办?我只需要再推一次吗?或者我需要明确地推送新分支吗?(抱歉,如果这是非常基本的,我以前从未使用过它)。
在创建新分支之前我还需要做什么吗?我的理解是,推送后,本地和远程的状态是一样的,对吗?
我是SoapUI中的groovy脚本新手,对可用信息量有点困惑,所以我可能只是忽略了这个问题的答案.
context.getCurrentStep()脚本中有一个方法可以加载GroovyUtils.但是在脚本步骤中,当然会返回脚本步骤本身的名称.
现在我想要显式地访问上一步的名称(更确切地说是响应)而不使用它的名称.是否有一种简单的方法可以实现这一目标?
可能重复:
C++ STL集更新很繁琐:我无法更改元素
我想使用a std::set<>来计算某个值的出现次数并同时对对象进行排序.为此,我创建了一个类RadiusCounter
class RadiusCounter
{
public:
RadiusCounter(const ullong& ir) : r(ir) { counter = 1ULL; }
void inc() { ++counter; }
ullong get() const { return counter;}
ullong getR() const { return r;}
virtual ~RadiusCounter();
protected:
private:
ullong r;
ullong counter;
};
Run Code Online (Sandbox Code Playgroud)
(析构函数不做任何操作)和比较运算符:
const inline bool operator==(const RadiusCounter& a, const RadiusCounter& b) {return a.getR() == b.getR();}
const inline bool operator< (const RadiusCounter& a, const RadiusCounter& b) {return a.getR() < b.getR();}
const inline bool operator> (const …Run Code Online (Sandbox Code Playgroud) 我想(在 C# 中)用枚举的可接受值填充组合框的可接受值列表System.IO.Ports.Parity。为此,我创建了一个集合:
public class theParitySource : ObservableCollection<Parity>
{
public theParitySource()
{
Array parities = System.Enum.GetValues( typeof( Parity ) );
foreach (Parity p in parities) this.Add(p);
}
}
Run Code Online (Sandbox Code Playgroud)
(顺便说一句:这个初始化有单行吗?)并将其作为组合框的数据上下文:
...
xmlns:local="clr-namespace:myNamespace"
...
<ComboBox ...>
<ComboBox.DataContext>
<local:theParitySource />
</ComboBox.DataContext>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)
然而,组合框仍然是空的(它显示为空,但似乎具有正确的长度),即使我可以在调试器中看到如何theParitySource填充。这种方法确实适用于另一个组合框(即使在同一个类中),我为波特率执行此操作。我用整数值初始化,所以我想这与我在这里使用枚举的事实有某种关系,但我不知道可能是什么原因。任何指针?我需要写一个转换器吗?
(当然我可以通过从枚举创建一个字符串列表来解决这个问题,但这会有点不愉快......)
编辑:实际上我更喜欢在 XAML 中完成所有这些。有没有一种简单的方法可以做到这一点?
给定正则表达式"\d",它将匹配"a123b456"中的每个数字(即1,2,3,4,5,6).
给定正则表达式"\d\d"和相同的测试字符串,似乎只匹配"12"和"45" - 这至少是http://regexpal.com/所说的,类似于我使用C++教科书创建的正则表达式评估器(其中使用boost/regex).
为什么第二个匹配"23"和"56",或者,如果该行为是正确的,为什么第一个匹配每个数字?