在下面的代码中,为什么编译器不抱怨mClass2?
class CMyClass{
private:
CMyClass(){}
};
void TestMethod(){
CMyClass mClass1; //Fails.
CMyClass mClass2(); //Works.
}
Run Code Online (Sandbox Code Playgroud) 考虑一个简单的函数模板:
template <typename T>
void FunctionTemplate(T t){
}
void MyFunction(){
int a;
FunctionTemplate(a);
FunctionTemplate<int>(a);
}
Run Code Online (Sandbox Code Playgroud)
在第一次调用(FunctionTemplate(a))时,编译器会解决引发问题的类型,是否有任何理由存在调用FunctionTemplate(FunctionTemplate<int>(a))的第二种方法或者我们无法使用第一种方法的任何令人信服的理由?
编辑:我的术语有点偏,所以请根据需要进行编辑.
我很抱歉,我知道有关指针,数组等的问题有一百万个,尽管基本上这样我似乎无法找到任何指向(哈哈!)的答案.
我有一个初始化为指向一块内存的指针,我知道我可以像访问数组一样访问这个内存:
char *mMem=new char[5000];
cout<<mMem[5]<<endl;
Run Code Online (Sandbox Code Playgroud)
实际上是:
char *mMem=new char[5000];
cout<<*(mMem+5)<<endl;
Run Code Online (Sandbox Code Playgroud)
我不明白的是如何获取元素的地址- 我知道元素不是一个正确的单词,因为mMem不是一个数组 - 如果我的理解是正确的,那就不可能当然,因为看起来每个站点在指针和数组时都会使用它想要的任何单词.所以,如果我有:
char *mMem=new char[5000];
cout<<mMem[5]<<endl;
or
cout<<*(mMem+5)<<endl;
Run Code Online (Sandbox Code Playgroud)
为什么运算符的地址不能正常工作:
cout<<&mMem[5]<<endl;
Run Code Online (Sandbox Code Playgroud)
我没有获取第5个元素的地址,而是从该元素开始打印出内存块内容.那么,为什么运算符的地址不能像我期望的那样工作呢?如何获得内存元素的地址?
我想知道是否有一种方法可以将字段名称传递给函数模板.考虑以下:
struct Type1{
unsigned int Field1;
unsigned int Field2;
};
struct Type2{
unsigned int Field2;
unsigned int Field3;
};
template <typename TYPE>
bool MyFunction(TYPE _Type){
if(_Type.Field1==5)
return false;
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但在MyFunction我指定的范围内.Field1,有没有办法可以将此字段的名称传递给模板,例如:
void TestFunction(){
Type1 mt1;
MyFunction(mt1, Field1);
}
Run Code Online (Sandbox Code Playgroud)
很明显,我并没有在这里模仿一种类型,而且我对这会被称为什么感到茫然(除了显而易见的答案 - 愚蠢!)因此我甚至都在努力寻找解决方案.
我有一个Stream对象,我正在使用BeginRead开始(显然)读入缓冲区; 一旦读取完成,就会调用AsyncCallback函数.在这个函数中,我可以检查用户是否想要获取下一个"块"并再次启动BeginRead过程.
我遇到的问题是用户可能会选择在流仍在读取时取消(因此在调用AsyncCallback函数之前),那么如何取消流的读取?
只是为了进一步解释这个问题 - 如果我使用带有Streams Read方法或异步BeginRead方法的BackgroundWorker,我似乎会得到相同的结果.在我可以检查流是否应该停止读取之前,用户可以等待Read/BeginRead方法完成任何时间长度.
编辑:下面的代码应该可以完成这项任务,我距离C#中的任何一个距离都是一百万英里所以它可能会有一些错误,因为我怀疑它是完美的,尽管它确实展示了解决方案.
简而言之,CWorkManager管理一定数量的线程(保存在CWorkerDetail类中).每个CWorkerDetail都有一个状态,可以是EWaiting意味着工作人员可以启动,EReading意味着工作人员正在从源读取,在此期间工作人员可以立即停止,EWriting可以保存读取到磁盘的数据 - 这不能立即停止,这个过程必须在线程停止之前完成.最后是EAborting,由经理设定,如果工人应该尽快中止; 现在只有在工作者处于无法中断的事物(例如写入磁盘)的中间时才会设置此项.
现在,实际上没有任何读取或写入,因为这会使主要解决方案复杂化(这基本上只是StopWorker函数检查CWorker的标志,看它是否可以立即中止); 因此我们只是让线程睡觉.
GUI侧非常简单,只有一个列表框(显示每个工作人员的状态)和一个停止和启动按钮.所有代码都在下面,希望这有助于某些人,但正如我所说,我对C#并不擅长,所以请注意bug等...
CWorkManager.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace ThreadApplication {
//A worker that spawns a number of threads (managed internally) that does nothing useful at all.
public class CWorkManager {
//The status of the worker.
public enum EWorkerStatus {
EWaiting,
EReading,
EWriting,
EAborting,
}
//Holds all data relevant to the worker.
private class CWorkerDetails {
//Simple variables.
private readonly Object _Lock=new Object(); …Run Code Online (Sandbox Code Playgroud) 我的应用程序是一个小型的C#数据库,我BinaryWriter用来将数据库保存到一个文件,该文件与bool,uint32等基本类型工作正常.
虽然我有一个类型的变量Object(允许用户)存储任何数据类型),但由于我的应用程序不(也不需要)知道此变量的实际类型,我不确定如何使用它来编写它BinaryWriter.
有没有办法我可以抓住变量的内存并保存?那可靠吗?
编辑:
ba_friend提供的答案有两个函数用于将Object解序/序列化为字节数组,可以使用BinaryWriter将其与其长度一起写入.
我已经做了一些搜索,但我很难找到解决方案,所以如果有人认为这是重复我会很感激你说你输入的内容...似乎我的搜索能力已经休息了一天!:无论如何:
function CreateMe(){
//....
var mycell = row.insertCell(-1);
var myelement3 = document.createmyelement("input");
myelement3.type = "button";
myelement3.value = "Delete";
myelement3.onclick = DeleteMe;
myelement3.name = "Delete[]";
mycell.appendChild(myelement3);
//....
}
function DeleteMe(){
alert(this);
}
Run Code Online (Sandbox Code Playgroud)
我有一个带有按钮的表单,该按钮调用CreateMe,动态创建一个按钮.我所追求的是当单击此动态按钮时能够将参数传递给DeleteMe函数; 特别是这个:
onclick="DeleteMe(this.parentNode.parentNode.rowIndex)"
Run Code Online (Sandbox Code Playgroud)
来自:http://www.java2s.com/Code/JavaScript/HTML/Deletingtablerows.htm
我对如何前进这里感到有点失落,所以如果有人可以伸出援助之手,我将不胜感激.
编辑:为了清楚起见,我要问的是如何将动态生成按钮的onclick事件中的参数传递给DeleteMe函数.很明显我无法做到这一点,因为这只会立即评估函数:
myelement3.value = "Delete";
myelement3.onclick=DeleteMe(this.parentNode.parentNode.rowIndex);
myelement3.name = "Delete[]";
Run Code Online (Sandbox Code Playgroud) 我有以下代码,提示用户选择一系列单元格.
我很难检查范围是否有效(即他们只是在输入框中输入了一个数字?)或是否按下取消.我该如何区分?
Do While (True)
Dim mInput As Range
mInput = Application.InputBox(Prompt:="Please select the cells.", Type:=8)
If (mInput Is Nothing) Then
Exit Sub
End If
If (mInputRange.Columns.Count <> 1) Then
MsgBox "There must be only one column selected.", vbOKOnly
Else
End If
Loop
Run Code Online (Sandbox Code Playgroud) 看来我偶然发现了LINQ并且只是设法看到了它的用处.我不确定我是否要求太多,或者我是不是做得不对.我有以下笨拙的代码,
class CStation{
public String Make;
public List<ulong> TunedStations;
}
List<List<ulong>> mStations=(from t in Radios where t.Make==aMake select t.TunedStations).ToList();
if(mStations.Count!=0)
return mStations[0];
return null;
Run Code Online (Sandbox Code Playgroud)
功能是的,但我可以用LINQ怎么做?
我有一个ASP.net MVC项目,不可否认我对MS实现MVC的方式不太感兴趣,因此将项目剥离到最低限度.我没有定义任何路由,而是有一个DefaultDocument条目web.config指向实现的类IHttpHandler.
从我的IHttpHandler班级,我想输出一个Razor .cshtml文件,我不希望创建到cshtml文件的路由条目,所以我不能简单地将用户重定向到.cshtml文件.我发现了许多资源,PageParser.GetCompiledPageInstance但这似乎是针对aspx文件而不是Razor View引擎.
那么,在HttpContext 从我的IHttpHandler班级输出.cshtml文件时,我应该感兴趣哪些类?
public class Main : IHttpHandler{
public void ProcessRequest(HttpContext context){
//
}
}
Run Code Online (Sandbox Code Playgroud) c++ ×4
c# ×3
templates ×2
asp.net-mvc ×1
beginread ×1
binarywriter ×1
constructor ×1
database ×1
excel ×1
excel-vba ×1
ihttphandler ×1
javascript ×1
linq ×1
pointers ×1
private ×1
razor ×1
stream ×1
vba ×1