标签: using

"使用"声明可以与模板一起使用吗?

是否可以将"using"声明与模板基类一起使用?我已经读过它不在这里,但是由于技术原因还是它违反C++标准,它是否适用于gcc或其他编译器?如果不可能,为什么不呢?

示例代码(来自上面的链接):

struct A {
    template<class T> void f(T);
};

struct B : A {
    using A::f<int>;
};
Run Code Online (Sandbox Code Playgroud)

c++ gcc templates using

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

使用sed插入TAB

我用这个命令:

sed -i "10 i \t\t\ttime.sleep(0.1) " /home/test_file
Run Code Online (Sandbox Code Playgroud)

在第10行插入一行如下: <TAB><TAB><TAB>sleep(0.1)

但是我得到了

t<TAB><TAB>sleep(0.1)...
Run Code Online (Sandbox Code Playgroud)

你能告诉我怎么得到这个结果吗?谢谢

PS.我在可执行的bash脚本中使用此命令.

tabs command using sed insert

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

用C++重命名一个类

我有一个类,我想在我的头文件中引用它,它位于一长串嵌套命名空间中:MySpaceA::MySpaceB::MySpaceC::MySpaceD::MyVeryLongNamedClass.我想以不同的名称使用它,但不是MyVeryLongNamedClass- 更短更有用的东西,比如MyClass.

我可以放入using MySpaceA::MySpaceB::MySpaceC::MySpaceD我的标题,但我不想导入整个命名空间.我宁愿有某种结构

using MyClass = MySpaceA::MySpaceB::MySpaceC::MySpaceD::MyVeryLongNamedClass

我知道这可以使用名称空间,但我似乎无法使用它来使用类.

非常感谢您的帮助.

c++ namespaces using rename reference

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

为什么我找不到RadioButtonFor方法?

这是我的静态类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using System.Linq.Expressions;
using System.Text;
using System.Web;

namespace Foo.WebUI.Infrastructure
{
    public static class HtmlHelpers
    {
        public static MvcHtmlString Image(this HtmlHelper helper, string src, string altText)
        {
            var builder = new TagBuilder("img");
            builder.MergeAttribute("src", src);
            builder.MergeAttribute("alt", altText);

            return MvcHtmlString.Create(builder.ToString(TagRenderMode.SelfClosing));
        }

        public static MvcHtmlString RadioButtonForEnum<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
        {
            var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
            var names = Enum.GetNames(metaData.ModelType);
            var sb = new StringBuilder();
            foreach (var name in names)
            {
                var id = …
Run Code Online (Sandbox Code Playgroud)

c# using asp.net-mvc-3

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

使用命名空间仅用于初始化列表

我在初始化列表中有很多命名空间用法,并且希望使用using命名空间来减少详细程度.但是,初始化列表超出了构造函数括号的范围,因此我必须将使用放在构造函数外部并使用它污染文件的其余部分.有没有办法根据需要调整使用范围?而不是:

MyClass::MyClass() :
    m_one(nsConstants::ONE),
    m_two(nsConstants::TWO),
    m_three(nsConstants::THREE)
{}
Run Code Online (Sandbox Code Playgroud)

我想要:

MyClass::MyClass() :
    using namespace nsConstants;
    m_one(ONE),
    m_two(TWO),
    m_three(THREE)
{}
Run Code Online (Sandbox Code Playgroud)

_

c++ namespaces using list

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

可以在C#中缩短数学参考吗?

在VB.NET中,我可以通过导入System.Math并直接引用其方法来使我的数学代码更加清晰:

Imports System.Math
[...]
Return New Vector3(Sin(az) * Cos(el), Cos(az) * Cos(el), Sin(el))
Run Code Online (Sandbox Code Playgroud)

但我不认为C#可以使用类来隐式访问它们的方法,所以我必须做类似的事情:

using System;
[...]
return new Vector3(Math.Sin(az) * Math.Cos(el), Math.Cos(az) * Math.Cos(el), Math.Sin(el));
Run Code Online (Sandbox Code Playgroud)

但那很难看; 它需要自己的滚动条!有没有办法用C#写一些看起来像我的VB.NET代码的东西?我可以为Sin和Cos编写局部包装器方法,但不会降低性能(因为函数调用的开销)?而且,这需要为我正在使用的每个类中使用的每个Math函数编写包装函数; 这也不是那么令人满意.

c# syntax import using

7
推荐指数
5
解决办法
730
查看次数

使用和Dispose()滥用范围处理不被释放的对象?

出于方便和安全的原因,我想使用该using语句来分配和释放来自/到池的对象

public class Resource : IDisposable
{
    public void Dispose()
    {
        ResourcePool.ReleaseResource(this);
    }
}

public class ResourcePool
{
    static Stack<Resource> pool = new Stack<Resource>();

    public static Resource GetResource()
    {
        return pool.Pop();
    }

    public static void ReleaseResource(Resource r)
    {
        pool.Push(r);
    }
}
Run Code Online (Sandbox Code Playgroud)

和访问池一样

using (Resource r = ResourcePool.GetResource())
{
     r.DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

我找到了一些关于滥用usingDispose()范围处理的主题,但所有这些主题都包含在内using (Blah b = _NEW_ Blah()).
在离开使用范围但保留在池中之后,不会释放对象.
如果using语句只是简单地扩展到一个简单,try finally Dispose()这应该工作正常但是在幕后会发生更多的事情,或者在未来的.Net版本中这种情况不会发生吗?

c# using anti-patterns

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

特定位置的C++模板别名(使用)

using在这种情况下,我需要通过(或任何其他方法)使用类型别名:

template <class T>
typename std::enable_if< /*HERE*/>::value
f (...) {};
Run Code Online (Sandbox Code Playgroud)

我写的HERE地方很长,结构内部定义了多种类型,而不是写,typename <very long templated struct dependent on T>::type我想写一个快捷方式.

我在更多情况下遇到过这种情况,比如模板特化和后缀返回类型语法.那么using在第一行template <...>和结构/类或函数之间的位置是否有任何使用方式(没有双关语)?

我尝试使用,(逗号)之类的东西,(using X = ... , /*actually using X*/)但没有成功.

有效的是全球范围内的 using

template <class Iterator>
using DT = typename DereferenceType<Iterator>::type&;
Run Code Online (Sandbox Code Playgroud)

但我不想要全局范围,我希望范围只适用于我使用它的模板.我不想写DT<Iterator>,只是DT.

不用说宏或任何预处理器指令都是不可能的.


真人生活的例子:

template <class Iterator, class GetCompValue, class SortOrder = Ascending>
typename std::enable_if<
    IsDereferenceable<Iterator>::value &&
    IsCallableLike<GetCompValue,
                   typename DereferenceType<Iterator>::type&(
                      typename DereferenceType<Iterator>::type&)>::value &&
    IsSortOrder<SortOrder>::value, void>::type
RadixSortLSDByteOffsetIter(Iterator …
Run Code Online (Sandbox Code Playgroud)

c++ scope using template-aliases

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

"使用typename"指令是否未由编译器实现?

我有一些看起来像这样的代码:

namespace myLibrary
{
    class A
    {
    public:
        struct Nested
        {
            ...
        };

        ...
    };
}
Run Code Online (Sandbox Code Playgroud)

在代码的其他部分,我需要访问A.因为我喜欢可读的代码,我也喜欢using指令:

using myLibrary::A;
...
A a;
Run Code Online (Sandbox Code Playgroud)

现在,在某些时候我还需要访问我的嵌套类,所以我想写这样的东西:

using myLibrary::A::Nested;
Run Code Online (Sandbox Code Playgroud)

显然,编译器不能知道这是一个嵌套类而不是类成员,并给我一个错误:

error : using declaration can not refer to class member
Run Code Online (Sandbox Code Playgroud)

我无法理解的是为什么这不能解决问题:

using typename myLibrary::A::Nested;
Run Code Online (Sandbox Code Playgroud)

编译器仍然给我完全相同的错误!

幸运的是,我有其他选择:

// Using a typedef
typedef myLibrary::A::Nested Nested;

// Using the new C++11 syntax for type aliasing
using Nested = myLibrary::A::Nested;
Run Code Online (Sandbox Code Playgroud)

但我想了解为什么使用typename指令不起作用.它不符合我的想法吗?或者它不是由编译器实现的?如果是后者,是否有理由呢?

c++ using nested-class typename

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

如何使用模板在C++中使用`using`(制作参数化别名)创建别名?

我正在阅读Bjarne Stroustrup的"The C++ Programming Language"第4版.在本书的第一部分中,我发现了using如下所示的用法:

// Error is in these 2 lines
template<typename T>
using Iterator<T> = typename T::iterator;
Run Code Online (Sandbox Code Playgroud)

*有关完整程序和错误消息,请参阅[**]*

这正是我在页面105中找到的.当我把它变成一个完整的程序并试图编译它时,g++给了我这个错误masseage:

> g++ -std=c++14 -o fnd find_all.cpp
find_all.cpp:13:15: error: expected '=' before '<' token
 using Iterator<T> = typename T::iterator;
           ^
find_all.cpp:13:15: error: expected type-specifier before '<' token
Run Code Online (Sandbox Code Playgroud)

我在这段代码中找不到任何问题,(我是C++的新手,我用我的小知识找不到问题)(更混乱的是我在Bjarne的书上发现了这个)

有人能告诉我为什么那段代码会出错?

注:不过如果我换成Iterator<C>typename C::iterator(见下文),它工作正常,没有错误!

[**]完整程序和错误消息:

// Error is in these 2 lines
template<typename T>
using Iterator<T> = typename T::iterator;
// -------------------------------------------

// For …
Run Code Online (Sandbox Code Playgroud)

c++ templates using c++11 c++14

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