小编wow*_*bob的帖子

variadiac模板出错:"参数包必须扩展"

这是我编写的可变模板函数:

template<class Container, class Value, class... Args>
Value& insert(Container& c, Args&&... args) {
    c.emplace_back(args);
    return c.back();
}
Run Code Online (Sandbox Code Playgroud)

当我这样使用时,我insert收到一个错误:

list<int> lst;
int& num = insert<list<int>, int, int>(lst, 4);
Run Code Online (Sandbox Code Playgroud)

该错误在以下内容中抱怨此行insert:

c.emplace_back(args); // <= 'args' : parameter pack must be
                      //             expanded in this context
Run Code Online (Sandbox Code Playgroud)

这意味着什么,我该如何解决?

c++ variadic-templates

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

ghc 7.10.2类型系列扩展不起作用

parse error on input ‘where’在GHC 7.10.2中尝试以下示例时得到:

{-# LANGUAGE TypeFamilies #-}

type family F a :: *
type instance where
  F (Maybe Int)  = Int
  F (Maybe Bool) = Bool
  F (Maybe a)    = String
Run Code Online (Sandbox Code Playgroud)

两年前有人问过GHC 7.4.2.

今年我用GHC 7.6.*(不记得最后一位数字)的类型家庭.这是GHC 7.10.2的问题吗?

根据用户指南,可以使用类型系列.

我的GHC 7.10.2和cabal 1.22.6.0从这个PPA安装.

haskell ghc type-families

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

类模板的可变构造函数模板的专业化

这是一个具有可变构造函数的类,它是用于复制和从临时移动的特殊化.

template<class Obj>
class wrapper {
protected:
   Obj _Data;
public:

   wrapper(const wrapper<Obj>& w): _Data(w._Data) {}

   wrapper(wrapper<Obj>&& w):
      _Data(std::forward<Obj>(w._Data)) {}

   template<class ...Args>
   wrapper(Args&&... args):
      _Data(std::forward<Args>(args)...) {}

   inline Obj& operator()() { return _Data; }

   virtual ~wrapper() {}
};
Run Code Online (Sandbox Code Playgroud)

当我使用这样的专业化之一

wrapper<int> w1(9);
wrapper<int> w2(w1);
Run Code Online (Sandbox Code Playgroud)

我收到了错误:w1的类型被推断为w1.

VS2012的输出:

error C2440: 'initializing' : cannot convert from 'win::util::wrapper<int>' to 'int'
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题呢?

c++ templates variadic-templates c++11

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

如何导入模块隐藏子模块或实例?

有了这个代码

import Control.Monad
import Control.Applicative
import Control.Monad.State

class DefVal a where
  defVal :: a

instance (DefVal a) => Alternative (Either a) where
  empty = Left defVal
  (Left _) <|> x = x
  x        <|> _ = x

instance (DefVal a) => MonadPlus (Either a) where
  mzero = empty
  mplus = (<|>)

newtype ErrString = ErrString { toString :: String }
  deriving Show

instance DefVal ErrString where
  defVal = ErrString "Default Error String"
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

Duplicate instance declarations:
  instance DefVal a => …
Run Code Online (Sandbox Code Playgroud)

import haskell module

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

在编译时按文件内容初始化函数

有没有办法初始化函数

someText :: Text
Run Code Online (Sandbox Code Playgroud)

哪个值将存储在编译时可用的文件中?

我以为我可以使用TH,但现在我才发现

embedFile :: FilePath -> Q Exp
runQ :: Quasi m => Q a -> m a
Run Code Online (Sandbox Code Playgroud)

我只能解开QIO:

instance Quasi IO    
instance Quasi Q
Run Code Online (Sandbox Code Playgroud)

我想我需要Quasi的Identity实例,但没有人.

haskell template-haskell

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

bmiColors字段的BITMAPINFO结构

BITMAPINFO 结构有以下声明

typedef struct tagBITMAPINFO {
    BITMAPINFOHEADER bmiHeader;
    RGBQUAD bmiColors[1];
} BITMAPINFO;
Run Code Online (Sandbox Code Playgroud)

为什么RGBQUAD数组是静态的?为什么它不是指针?

c++ windows arrays struct

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