小编R4D*_*4D4的帖子

C++ - 如果构造函数是私有的,那么这是做什么的?

在下面的代码中,为什么编译器不抱怨mClass2?

class CMyClass{
private:
    CMyClass(){}
};

void TestMethod(){
    CMyClass mClass1;   //Fails.
    CMyClass mClass2(); //Works.
}
Run Code Online (Sandbox Code Playgroud)

c++ constructor private most-vexing-parse

15
推荐指数
2
解决办法
445
查看次数

有明确说明模板类型的原因吗?

考虑一个简单的函数模板:

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))的第二种方法或者我们无法使用第一种方法的任何令人信服的理由?

编辑:我的术语有点偏,所以请根据需要进行编辑.

c++ templates

11
推荐指数
3
解决办法
253
查看次数

获取指针的地址

我很抱歉,我知道有关指针,数组等的问题有一百万个,尽管基本上这样我似乎无法找到任何指向(哈哈!)的答案.

我有一个初始化为指向一块内存的指针,我知道我可以像访问数组一样访问这个内存:

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个元素的地址,而是从该元素开始打印出内存块内容.那么,为什么运算符的地址不能像我期望的那样工作呢?如何获得内存元素的地址?

c++ pointers pointer-address

7
推荐指数
1
解决办法
1万
查看次数

将字段名称传递给函数模板

我想知道是否有一种方法可以将字段名称传递给函数模板.考虑以下:

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)

很明显,我并没有在这里模仿一种类型,而且我对这会被称为什么感到茫然(除了显而易见的答案 - 愚蠢!)因此我甚至都在努力寻找解决方案.

c++ templates

7
推荐指数
2
解决办法
4259
查看次数

在AsyncCallback函数之外停止异步流

我有一个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# stream beginread

5
推荐指数
1
解决办法
2950
查看次数

在Object上使用BinaryWriter

我的应用程序是一个小型的C#数据库,我BinaryWriter用来将数据库保存到一个文件,该文件与bool,uint32等基本类型工作正常.
虽然我有一个类型的变量Object(允许用户)存储任何数据类型),但由于我的应用程序不(也不需要)知道此变量的实际类型,我不确定如何使用它来编写它BinaryWriter.
有没有办法我可以抓住变量的内存并保存?那可靠吗?

编辑:

ba_friend提供的答案有两个函数用于将Object解序/序列化为字节数组,可以使用BinaryWriter将其与其长度一起写入.

c# database binarywriter

4
推荐指数
1
解决办法
7516
查看次数

使用onclick参数动态创建按钮

可能重复:
如何将参数传递给事件处理函数并仍然使用'this'引用?

我已经做了一些搜索,但我很难找到解决方案,所以如果有人认为这是重复我会很感激你说你输入的内容...似乎我的搜索能力已经休息了一天!:无论如何:

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)

javascript javascript-events

3
推荐指数
1
解决办法
6354
查看次数

检查用户选择的范围或取消

我有以下代码,提示用户选择一系列单元格.

我很难检查范围是否有效(即他们只是在输入框中输入了一个数字?)或是否按下取消.我该如何区分?

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)

excel vba excel-vba

2
推荐指数
1
解决办法
1187
查看次数

如果找不到任何内容,如何为LINQ返回特定值?

看来我偶然发现了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怎么做?

c# linq

2
推荐指数
1
解决办法
276
查看次数

在没有重定向的情况下从IHttpHandler返回Razor(cshtml)页面

我有一个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)

asp.net-mvc ihttphandler razor

2
推荐指数
1
解决办法
531
查看次数